0
点赞
收藏
分享

微信扫一扫

659. Split Array into Consecutive Subsequences

犹大之窗 2022-08-03 阅读 81


You are given an integer array sorted in ascending order (may contain duplicates), you need to split them into several subsequences, where each subsequences consist of at least 3 consecutive integers. Return whether you can make such a split.

Example 1:

Input: [1,2,3,3,4,5]
Output: True
Explanation:
You can split them into two consecutive subsequences :
1, 2, 3
3, 4, 5

Example 2:

Input: [1,2,3,3,4,4,5,5]
Output: True
Explanation:
You can split them into two consecutive subsequences :
1, 2, 3, 4, 5
3, 4, 5

Example 3:

Input: [1,2,3,4,4,5]
Output: False
Note:
The length of the input is in range of [1, 10000]

class Solution
public boolean isPossible(int[] nums) {
Integer prev = null;
int prevCount = 0;
Queue<Integer> starts = new LinkedList();
int anchor = 0;
for (int i = 0; i < nums.length; ++i) {
int t = nums[i];
if (i == nums.length - 1 || nums[i+1] != t) {
int count = i - anchor + 1;
if (prev != null && t - prev != 1) {
while (prevCount-- > 0)
if (prev < starts.poll() + 2)
return false;
prev = null;
}

if (prev == null || t - prev == 1) {
while (prevCount > count) {
prevCount--;
if (t - 1 < starts.poll() + 2)
return false;
}
while (prevCount++ < count)
starts.add(t);
}
prev = t;
prevCount = count;
anchor = i + 1;
}
}

while (prevCount-- > 0)
if (nums[nums.length - 1] < starts.poll() + 2)
return false;
return true;
}
}


举报

相关推荐

0 条评论