LeetCode659 分割陣列為連續子串行

2021-10-11 07:42:34 字數 2263 閱讀 5742

目錄

一、題目

二、解題思路

三、**

給你乙個按公升序排序的整數陣列 num(可能包含重複數字),請你將它們分割成乙個或多個子串行,其中每個子串行都由連續整數組成且長度至少為 3 。

如果可以完成上述分割,則返回 true ;否則,返回 false 。

示例 1:

輸入: [1,2,3,3,4,5]

輸出: true

解釋:你可以分割出這樣兩個連續子串行 : 

1, 2, 3

3, 4, 5

示例 2:

輸入: [1,2,3,3,4,4,5,5]

輸出: true

解釋:你可以分割出這樣兩個連續子串行 : 

1, 2, 3, 4, 5

3, 4, 5

示例 3:

輸入: [1,2,3,4,4,5]

輸出: false

輸入的陣列長度範圍為 [1, 10000]

每次都記錄以哪個數字結尾:

1.當前數字如果在count1裡找到之前的數字結尾的計數不為0,則count2裡新增當前數字結尾的計數,count1裡之前的數字結尾計數減1;

2.同理,當前數字如果在count2裡找到之前的數字結尾的計數不為0,則count3up裡新增當前數字結尾的計數,count2裡之前的數字結尾計數減1;

3.三個數滿足要求了,只需要當前數字如果在count3up裡找到之前的數字結尾的計數不為0,則count3up裡新增當前數字結尾的計數,count3up裡之前的數字結尾計數減1;

4.最後只要判斷count1和count2裡的數字結尾計數是否都為0即可;

from collections import defaultdict

class solution:

def ispossible(self, nums: list) -> bool:

""":param nums:

:return:

每次都記錄以哪個數字結尾:

當前數字如果在count1裡找到之前的數字結尾的計數不為0,則count2裡新增當前數字結尾的計數,count1裡之前的數字結尾計數減1;

同理,當前數字如果在count2裡找到之前的數字結尾的計數不為0,則count3up裡新增當前數字結尾的計數,count2裡之前的數字結尾計數減1;

三個數滿足要求了,只需要當前數字如果在count3up裡找到之前的數字結尾的計數不為0,則count3up裡新增當前數字結尾的計數,count3up裡之前的數字結尾計數減1;

"""count1 = defaultdict(int) # 乙個數

count2 = defaultdict(int) # 兩個數

count3up = defaultdict(int) # 三個數或以上

for i in nums:

if count1[i - 1]:

count1[i - 1] -= 1

count2[i] += 1

elif count2[i - 1]:

count2[i - 1] -= 1

count3up[i] += 1

elif count3up[i - 1]:

count3up[i - 1] -= 1

count3up[i] += 1

else:

count1[i] += 1

return sum(count1.values()) == 0 and sum(count2.values()) == 0

if __name__ == '__main__':

nums = [1, 2, 3, 3, 4, 4, 5, 5]

s = solution()

ans = s.ispossible(nums)

print(ans)

leetcode 659 分割陣列為連續子串行

659.分割陣列為連續子串行 這個題目利用貪心和hash來解決 貪心是保證所獲得的序列能夠長,hash用來快速判斷和獲得該數字的資訊 對於乙個數字val,首先應該判斷它是否能夠接到乙個序列當中 貪心 若不能夠接入,則判斷其能否生成乙個最小長度為3的序列。若兩種方式都不能滿足,那麼就下結論,存在乙個不...

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結尾的子串行,有則接著,沒有則需要新建長度最...