第五十八天:力扣659题,分割数组为连续子序列
地址:leetcode-cn.com/problems/sp…
思路:javascript使用Map统计nums然后遍历map 每次刮一个合法字串出来 直到把nums刮完
var isPossible = function(nums) {
// 统计nums 将结果放在map里面
let map = new Map();
for(let i=0; i<nums.length; i++) {
let key = nums[i];
map.get(key) ? map.set(key, map.get(key) + 1) : map.set(key, 1); }
while(nums.length > 0) {
let count = 0;
let prev_key = -1;
let prev_count = 0;
for(let [key, value] of map) {
// 跳过条件: 未开始计数 当前值为0
if(value == 0 && count == 0) continue;
// 结束条件: 键不连续
if(prev_key != -1 && prev_key+1 != key) break;
// 结束条件: 值不连续
if(value < prev_count) break;
// 记录本次的键和值
prev_count = value;
prev_key = key;
// 更新map将本次的值 -1
map.set(key, value-1);
// 更新nums长度 -1
nums.pop();
// 更新本次遍历取得连续字串长度 +1
count++;
}
// 遍历剩余map 取出的连续字串长度小于3 失败
if(count < 3) return false;
}
// 结束while, 将nums成功分解完毕 成功
return true;
};
执行用时:116 ms, 在所有 JavaScript 提交中击败了98.00%的用户
内存消耗:45.2 MB, 在所有 JavaScript 提交中击败了80.00%的用户