太難了 不會寫 試試寫過程分析吧 方法一 雜湊表+最小堆
1class
solution
8if (map.containskey(x - 1))
13 map.get(x).offer(prevlength + 1);
14 } else17}
18 set>> entryset =map.entryset();
19for (map.entry>entry : entryset) 24}
25return
true;26
}27 }
1:!map.containskey(1) => map現狀:
!map.containskey(1 - 1) => map.get(1).offer(1) => map現狀:
2: !map.containskey(2) => map現狀: => map.containskey(1) => prevlength = map.get(1).poll() => poll()後1的queue為empty => map更新為:
3:!map.containskey(3) => map現狀: => map.containskey(2) => prevlength = map.get(2).poll() => poll()後2的queue為empty => map更新為:
3:不滿足前兩個if迴圈 進入 else =>map更新為:
4:!map.contains(4) => map更新: => map.contanskey(3) => prevlength = map.get(3).poll() =>
poll()後3的queue不為empty map 更新為
4: map.containskey(3) => prevlength = 3 =>map.get(3).isempty 為空 => map更新為
5: map.containskey(4) => prevlength = 2 =>map.get(4).isempty 不為空 => map更新為
5:map.containskey(4) => prevlength =4 =>map.get(4).isempty為空 => map更新為
最後呢 就是遍歷一下map中的priorityqueue 如果有<3的就返回false
思路呢 這裡抄力扣的答案力:
遍歷陣列,當遍歷到元素 xx 時,可以得到乙個以 xx 結尾的子串行。
如果雜湊表中存在以 x-1x−1 結尾的子串行,則取出以 x-1x−1 結尾的最小的子串行長度,將子串行長度加 11 之後作為以 xx 結尾的子串行長度。此時,以 x-1x−1 結尾的子串行減少了乙個,以 xx 結尾的子串行增加了乙個。
如果雜湊表中不存在以 x-1x−1 結尾的子串行,則新建乙個長度為 11 的以 xx 結尾的子串行。
1class
solution
9for (int
x : nums) else
else28}
29}30}
31return
true;32
}33 }
方法二 貪心 這個力扣寫的挺明白的 就不說了
又是做不出日常的一天 難頂 真有你的啊 力扣
659 分割陣列為連續子串行
貪心 按數字大小的順序,盡量將當前數字與之前產生的數鏈連線在一起。考慮1 2 3 4 4 5 5 6這樣一組數字,遍歷到第二個4的時候,就應該檢測能不能再組成一條新的數鏈,這時就把6給從count中減掉了,盡可能避免剩下短鏈。class solution else if tails.get x 0 ...
659 分割陣列為連續子串行
給你乙個按公升序排序的整數陣列 num 可能包含重複數字 請你將它們分割成乙個或多個子串行,其中每個子串行都由連續整數組成且長度至少為 3 如果可以完成上述分割,則返回 true 否則,返回 false 貪心演算法 思路分析 分析i時,先查詢有沒有以i 1結尾的子串行,有則接著,沒有則需要新建長度最...
659 分割陣列為連續子串行
給你乙個按公升序排序的整數陣列 num 可能包含重複數字 請你將它們分割成乙個或多個子串行,其中每個子串行都由連續整數組成且長度至少為 3 如果可以完成上述分割,則返回 true 否則,返回 false 示例 1 輸入 1,2,3,3,4,5 輸出 true 解釋 你可以分割出這樣兩個連續子串行 1...