dengch

 

3.最长连续序列

题目概述:给定一个无序数组,问这个数组的元素能够组成的连续数组的最长长度为多少。
解题思路:很明显,我们需要对该数组先进行排序处理。我一开始用的是双指针,第一个指针枚举起点,第二个指针枚举该起点能够到达的最右边的距离,WA了。因为该数组有重复元素。(其实只要使用set去个重,这种方法就能AC了,不过当时没想到)。接着,我观察每个元素的数据范围在-1e9-1e9,而数组长度在1e5以内,这说明可以使用离散化的思想。对于无序离散化,可以直接使用map集合。再结合线性dp的思想,就能AC本题。
状态定义:f[i]:表示以i结尾的连续数组的最大长度
状态转移:f[i] = f[i - 1] + 1
状态起点:f[min] = 1
答案:Max(f[i])

代码

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length == 0)return 0;
        //排序
        Arrays.sort(nums);
        Map<Integer,Integer>map = new HashMap<>();
        map.put(nums[0],1);
        for(int i = 1; i < nums.length; i ++){
            int key = nums[i];
            int value = map.getOrDefault((nums[i] - 1),0) + 1;
            map.put(key,value);
        }

        int res = 0;
        for(int i : nums){
            res = Math.max(res,map.get(i));
        }

        return res;
    }
}

posted on 2023-10-31 11:29  BkDench  阅读(7)  评论(0编辑  收藏  举报

导航