LeeCode697数组的度(Java)(哈希)(每日签到)

题目链接:LeeCode697数组的度
题目描述:在这里插入图片描述
题目有点绕嘴就是说求出数组的最大度,度就是数组最多拥有多少个相同的数,然后让子序列在保证度相同的同时尽可能短。
思路非常简单,我使用了一个hashmap,每个键对应一个长度为3的数组,degree[0]存度,degree[1]存该数在序列中起点,degree[2]则存终点。然后找出最大度里面起点和终点差最小的,效率还是蛮高得

class Solution {
    
    
    public static int findShortestSubArray(int[] nums) {
    
    
        Map<Integer,int[]> map=new HashMap<>();
        int max=1,min=Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
    
    
        	//如果不存在,初始化度,起点和终点
            if(!map.containsKey(nums[i])){
    
    
                int[] degree=new int[3];
                //degree[0]存度,degree[1]存该数在序列中起点,degree[2]则存终点
                degree[0]=1;
                degree[1]=i;
                degree[2]=i;
                map.put(nums[i], degree);
            }else{
    
    //已经存在度加一,七点不用管终点向后刷新
                int[] ints = map.get(nums[i]);
                ints[0]=ints[0]+1;
                //记录最大的度是多少
                if(ints[0]>max)max=ints[0];
                ints[2]=i;
                map.put(nums[i], ints);
            }
        }
        //在最大的度里面找最短的序列
        for (Integer integer : map.keySet()) {
    
    
            int[] ints = map.get(integer);
            if(ints[0]==max&&min>ints[2]-ints[1]){
    
    
                min=ints[2]-ints[1];
            }
        }
        return min+1;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43590593/article/details/113886843
今日推荐