/** * @param {number[]} nums * @return {number} */ var longestConsecutive = function (nums) { // 装连续数字的记录数组 const recordArray = []; // 去重加排序 const numsArr = Array.from(newSet(nums)).sort((a, b) => a - b); // 记录最长的连续次数 let longestStreak = 0; for (let i = 0; i < numsArr.length; i++) { if (recordArray.length === 0 || numsArr[i - 1] + 1 === numsArr[i]) { // 如果记录数组为0,说明是第一次或者是前面连续的中断了 recordArray.push(numsArr[i]); if (longestStreak < recordArray.length) { // 最长次数小于记录数组的长度,则覆盖掉 longestStreak = recordArray.length; } } else { console.log(i, recordArray, numsArr[i], numsArr); if (longestStreak < recordArray.length) { longestStreak = recordArray.length; } // 中断则置空记录数组,且把当前的放进去 recordArray.length = 0; recordArray.push(numsArr[i]); } } return longestStreak; };
这个也可以用变量记录,不用数组记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
varlongestConsecutive = (nums) => { if (nums.length === 0) return0 nums.sort((a, b) => a - b) let max = 1 let count = 1 for (let i = 0; i < nums.length - 1; i++) { let cur = i, next = i + 1 if (nums[cur] === nums[next]) continue// 相同就跳过本次循环 if (nums[cur] + 1 === nums[next]) { // 发现连续项 count++ count++ } else { // 否则,count重置1 count = 1 } max = Math.max(max, count) } return max }