• 数组的度


    此博客链接:https://www.cnblogs.com/ping2yingshi/p/14422550.html

    数组的度

    题目链接:https://leetcode-cn.com/problems/degree-of-an-array/submissions/

    题目

    给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。

    你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。

    示例 1:

    输入:[1, 2, 2, 3, 1]
    输出:2
    解释:
    输入数组的度是2,因为元素1和2的出现频数最大,均为2.
    连续子数组里面拥有相同度的有如下所示:
    [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
    最短连续子数组[2, 2]的长度为2,所以返回2.
    示例 2:

    输入:[1,2,2,3,1,4,2]
    输出:6

    题解

    利用哈希把相同数组的下标存到value中,然后统计value中最大的值,最后用最大value中最后一个下标减去第一个下标。

    代码

    class Solution {
        public int findShortestSubArray(int[] nums) {
             Map<Integer,ArrayList> map=new HashMap();
             for(int i=0;i<nums.length;i++){
                 ArrayList<Integer> list=new ArrayList();
                 if(map.get(nums[i])==null)//map中不存在元素,则创建列表
                 {
                      list.add(i);
                      map.put(nums[i],list);
                 }
                 else{
                     map.get(nums[i]).add(i);
                 }
             }
                //  int ans[]=new int [map.size()];
                 int max=0;
                //  int k=0;
                 for(int temp:map.keySet())
                 {
                     max=Math.max(max,map.get(temp).size());
                    //  ArrayList list=map.get(temp);
                    //  ans[k++]=list[temp.size()-1]-list.get[0];
                 }
                 int count=1000000;
                 for(int temp:map.keySet())
                 {
                     if(max==map.get(temp).size()){
                        ArrayList<Integer> list=map.get(temp);
                        int last = list.get(new Integer(list.size()-1));
                        int first = list.get(0);
                        // System.out.print("last:"+last+"first:"+first);
                        count=Math.min(count,last - first+1);
                     }
                 }
             return count;
        }
    }

    结果

     

    出来混总是要还的
  • 相关阅读:
    使用opencv显示视频的方法
    使用visual studio 2012 编译opencv2.4.9
    求前100个斐波那契数
    EXTJs前后台交互 常用哦3种方式
    spring 注解
    程序 人生
    ajaxs
    LNMP源码安装脚本
    系统状态统计和查看
    Shell中的${}、##和%%使用范例
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14422550.html
Copyright © 2020-2023  润新知