题解 | #数组中的最长连续子序列#

数组中的最长连续子序列

http://www.nowcoder.com/practice/eac1c953170243338f941959146ac4bf

一开始并没有想起来先用排序做,直接用的HashMap,解法比较通俗易懂
思路是遍历整个数组,当前值继承上一个连续的数+1,如果没找到上一个连续的值就设置为1
然后对下一个连续的值进行处理,如果之前保存的map中有下一个连续的值,则遍历每一个连续的值并且+1
最后输出map中最大的一个值

import java.util.*;


public class Solution {
    /**
     * max increasing subsequence
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int MLS (int[] arr) {
        Map<Integer,Integer> map = new HashMap();
        int max = 0;
        for(int i = 0; i<arr.length; i++){
            int count = map.getOrDefault(arr[i]-1,0)+1;
            map.put(arr[i],count);
            int upper = arr[i]+1;
            while(map.containsKey(upper)){
                map.put(upper,++count);
                upper++;
            }
        }
        for(int i:map.keySet()){
            max = Math.max(max,map.get(i));
        }
        return max;
    }
}
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务