Leetcode128.最长连续序列

题目描述
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入:nums = [100,4,200,1,3,2]
输出:4

解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

示例 3:

输入:nums = [0,3,6,2,0,1,4,3]
输出:5

注意重复的数字不会打断最长序列。

解题思路:将原数组从小到大排序,遍历数组,遇到不连续的情况,保存之前连续的数组及其长度,然后从不连续的字母继续开始遍历。

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
   
    if(nums.length<2){
   
        return nums.length
    }
    function sortFn(value1,value2){
   
        return value1-value2
    }
    nums.sort(sortFn)
    let map=new Map()
    let i=0
    let key=i.toString()
    map.set(key,[nums[i]])
    while(i<nums.length-1){
   
        let list=map.get(key)?map.get(key):new Array()
        if(nums[i]+1===nums[i+1]){
   
            list.push(nums[i+1])
            map.set(key,list)
        }
        else if(nums[i]===nums[i+1]){
   }
        else{
   
            key=(i+1).toString()
            map.set(key,[nums[i+1]])
        }
        i++
    }
    let arr=Array.from(map.values())
    let len=0
    let ind=-1
    arr.forEach((item,index)=>{
   
        if(item.length>len){
   
            len=item.length
            ind=index
        }
    })
    return len
};

一开始想说将每个连续的数组都保存至哈希表中,后来看题干发现只要求最长的长度就行,所以用变量保存长度更加便捷。

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
   
    if(nums.length<2){
   
        return nums.length
    }
    function sortFn(value1,value2){
   
        return value1-value2
    }
    nums.sort(sortFn)
    let maxLen=0
    let i=0
    let len=1
    while(i<nums.length-1){
   
        if(nums[i]+1===nums[i+1]){
   
            len++
        }
        else if(nums[i]===nums[i+1]){
   }
        else{
   
                len=1

        }
        if(len>maxLen){
   
                maxLen=len
            }
        i++
    }
    
    return maxLen
};

能用for的时候尽量用for,while还是没有for方便~

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
   
    if(nums.length<2){
   
        return nums.length
    }
    function sortFn(value1,value2){
   
        return value1-value2
    }
    nums.sort(sortFn)
    let maxLen=0
    let i=0
    let len=1
    for(let i=0;i<nums.length-1;i++){
   
        if(nums[i]+1===nums[i+1]){
   
            len++
        }
        else if(nums[i]===nums[i+1]){
   }
        else{
   
                len=1

        }
        if(len>maxLen){
   
                maxLen=len
            }
    }
    return maxLen
};

相关推荐

  1. Leetcode128.连续序列

    2023-12-05 20:34:03       33 阅读
  2. leetCode 128.连续序列

    2023-12-05 20:34:03       36 阅读
  3. LeetCode 128 连续序列

    2023-12-05 20:34:03       19 阅读
  4. 128. 连续序列

    2023-12-05 20:34:03       34 阅读
  5. LeetCode每日刷题.09(128.连续序列)

    2023-12-05 20:34:03       35 阅读
  6. LeetCode-热题100:128.连续序列

    2023-12-05 20:34:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 20:34:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 20:34:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 20:34:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 20:34:03       18 阅读

热门阅读

  1. 如何保护 API 安全

    2023-12-05 20:34:03       41 阅读
  2. Diary17-Word页面设计

    2023-12-05 20:34:03       48 阅读
  3. 【lua】获取某月最大天数

    2023-12-05 20:34:03       30 阅读
  4. 【Android 线程】在子线程中更新UI

    2023-12-05 20:34:03       39 阅读
  5. spark学习一-------------------Spark算子最详细介绍

    2023-12-05 20:34:03       35 阅读
  6. 再探Docker:从Docker基础到跨服务器部署

    2023-12-05 20:34:03       24 阅读
  7. SSL证书认证对搜索引擎有影响吗?

    2023-12-05 20:34:03       43 阅读
  8. 如何判别使用的junit是4还是5

    2023-12-05 20:34:03       31 阅读
  9. 异常与junit

    2023-12-05 20:34:03       40 阅读
  10. CF 1901B Chip and Ribbon 学习笔记

    2023-12-05 20:34:03       41 阅读
  11. springcloud==ribbon

    2023-12-05 20:34:03       38 阅读