力扣日常 659分割陣列為連續子串行 題解解析

2022-08-21 14:54:06 字數 1711 閱讀 2143

太難了 不會寫 試試寫過程分析吧 方法一 雜湊表+最小堆

1

class

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 結尾的子串行。

1

class

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...