原创 二分法的兩個例子

問題一:轉變數組後最接近目標值的數組和(leetcode1300) 問題描述: 給你一個整數數組 arr 和一個目標值 target ,請你返回一個整數 value ,使得將數組中所有大於 value 的值變成 value 後,數組的和最

原创 分割等和子集 (遞歸 二維dp 一維dp)

問題描述: 給定一個只包含正整數的非空數組。是否可以將這個數組分割成兩個子集,使得兩個子集的元素和相等。 來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/partition-equa

原创 股票交易問題全拿下,一掃光

上來直接最難的,後面都是毛毛雨 問題一:買賣股票的最佳時機IV(leetcode188) 問題二:最大可交易次數不限(leetcode122) 問題三:最大交易次數爲1(leetcode121) 問題四:最大交易次數爲2(leetcode

原创 拓撲排序及其應用

AOV網的概念: AOV網是有向無環圖的一種,全稱Activity On Vertex Network,顧名思義 活動在頂點的網,使用頂點表示活動,頂點之間的邊表示活動的先後順序,例如<a,b>有一條從a到b的邊,表示a活動發生在b之前。

原创 前綴樹及其應用

前綴樹又稱爲字典樹,單詞查找樹。其最大的優點爲利用字符串的公共前綴極大的提高字符串的查詢效率。如下圖所示爲“apple”,“app”,“apply” “pen”組成的前綴樹結構 問題一:leetcod208實現前綴樹  問題描述: 實現

原创 子數組和的最大值最小問題

顧名思義,將一個數組分爲k個子數組,求解怎麼分纔可以使得這些子數組中和最大的值最小。 案例一:在D天內送達包裹的能力 傳送帶上的包裹必須在 D 天內從一個港口運送到另一個港口。 傳送帶上的第 i 個包裹的重量爲 weights[i]。每一

原创 0/1揹包與完全揹包

揹包問題描述: 假設有一個固定容量的揹包,然後有許多具有價值屬性和重量屬性的物品,要求在不超過揹包最大容量的基礎上裝的物品的總價值最大。 假設共有N個物品,揹包的容量爲M,物品 i 的價值與重量分別爲 value[i] 和 weight[

原创 子數組和問題II

本次的兩個算法題是子數組的積的問題,勉強也能算做子數組和的問題。 問題一:乘積小於k的子數組 問題描述: 給定一正整數數組以及一整數k,要求找到所有乘積小於k的子數組的個數。 input : nums = [3 5 2 8] k = 17

原创 子數組和問題

我們刷leetcod時總是遇到各種各樣的子數組和的問題,這類問題一般都是可以通過構建一個前綴和數組,以O(N^2)的時間複雜度求解,但這並不是最優解。 目錄 問題一:和爲K的數組 問題二:和等於k的最長/短子數組 問題三:和爲k的整數倍的

原创 只出現一次的數字問題

問題1 給定一整形數組,已知該數組中一個數出現了一次,其餘的數出現了偶數次,找到這個出現一次的數 解法一:使用hashMap記錄次數,然後返回只出現一次的那個數 代碼如下: public int singleNumber(int

原创 K個排序鏈表的合併

問題描述; 合併 k 個排序鏈表,返回合併後的排序鏈表。請分析和描述算法的複雜度。 示例: 輸入: [   1->4->5,   1->3->4,   2->6 ] 輸出: 1->1->2->3->4->4->5->6 來源:力扣(Lee

原创 遞增子序列問題

首先談下,子串和子序列的區別,子串指必須是連續,子序列可以不連續,但是不能改變相對位置。本文所有的問題都是針對於子序列的。 例如:str = "abcdefg" "abc","cdr"爲子串,“acd”爲子序列,“cad”啥都不是,由於相

原创 判斷平衡二叉樹

平衡二叉樹的定義:對於任一結點,其左右子樹高度之差不大於1。 因此解決該問題自然而然就想到改寫求二叉樹的高度的算法。 如下爲求二叉樹高度的算法 public int getHeight(TreeNode root) {