Leetcode 659.分割數組為連續子序列
阿新 • • 發佈:2019-02-18
div round urn extend oid map 輸出 ima 長度
分割數組為連續子序列
輸入一個按升序排序的整數數組(可能包含重復數字),你需要將它們分割成幾個子序列,其中每個子序列至少包含三個連續整數。返回你是否能做出這樣的分割?
示例 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 class Solution { 2 public boolean isPossible(int[] nums) { 3 Counter count = new Counter(); 4 Counter tails = new Counter(); 5 for (int x: nums) count.add(x, 1); 6 7 for (int x: nums) { 8 if (count.get(x) == 0) {9 continue; 10 } else if (tails.get(x) > 0) { 11 tails.add(x, -1); 12 tails.add(x+1, 1); 13 } else if (count.get(x+1) > 0 && count.get(x+2) > 0) { 14 count.add(x+1, -1); 15 count.add(x+2, -1);16 tails.add(x+3, 1); 17 } else { 18 return false; 19 } 20 count.add(x, -1); 21 } 22 return true; 23 } 24 } 25 26 class Counter extends HashMap<Integer, Integer> { 27 public int get(int k) { 28 return containsKey(k) ? super.get(k) : 0; 29 } 30 31 public void add(int k, int v) { 32 put(k, get(k) + v); 33 } 34 }
Leetcode 659.分割數組為連續子序列