Back to all solutions
#659 - Split Array into Consecutive Subsequences
Problem Description
You are given an integer array nums that is sorted in non-decreasing order.
Determine if it is possible to split nums into one or more subsequences such that both of the following conditions are true:
- Each subsequence is a consecutive increasing sequence (i.e. each integer is exactly one more than the previous integer).
- All subsequences have a length of 3 or more.
Return true if you can split nums according to the above conditions, or false otherwise.
A subsequence of an array is a new array that is formed from the original array by deleting some (can be none) of the elements without disturbing the relative positions of the remaining elements. (i.e., [1,3,5] is a subsequence of [1,2,3,4,5] while [1,3,2] is not).
Solution
/**
* @param {number[]} nums
* @return {boolean}
*/
var isPossible = function(nums) {
const map = new Map();
const map2 = new Map();
for (const n of nums) {
map.set(n, (map.get(n) || 0) + 1);
}
for (const n of nums) {
if (map.get(n) === 0) continue;
if ((map2.get(n) || 0) > 0) {
map2.set(n, map2.get(n) - 1);
map.set(n, map.get(n) - 1);
map2.set(n + 1, (map2.get(n + 1) || 0) + 1);
} else if ((map.get(n) || 0) > 0 && (map.get(n + 1) || 0) > 0 && (map.get(n + 2) || 0) > 0) {
map.set(n, map.get(n) - 1);
map.set(n + 1, map.get(n + 1) - 1);
map.set(n + 2, map.get(n + 2) - 1);
map2.set(n + 3, (map2.get(n + 3) || 0) + 1);
} else {
return false;
}
}
return true;
};