/** * @param {number[]} nums * @return {number} */varlongestConsecutive=function(nums){letidx=newSet(nums);letlen=0;for(letxofidx){if(idx.has(x-1))continue;//确保x一定是这个序列的第一个lety=x+1;while(idx.has(y))y++;len=Math.max(len,y-x);//优化if(2*len>idx.size)break;}returnlen;}核心思想:哈希集合
if(idx.has(x-1))continue;//核心核心核心算法细节:for循环遍历的一定要是新的哈希集合,不能是原数组nums,否则会重复查找非常多次
API 调用: Set
语法细节: size和length
| 数据类型 | 属性 | 说明 |
|---|---|---|
| Array | length | 元素数量 |
| Set | size | 元素数量 |
| Map | size | 键值对数量 |
| String | length | 字符数量 |
时间复杂度分析: O(N)
虽然这是一个"循环嵌套",但其实这是线性查找,因为每个元素只被访问一次,"核心"的那一步时间复杂度是O(1),这最关键的,确保不会重复查找