zoukankan      html  css  js  c++  java
  • 697. Degree of an Array

    697. Degree of an Array - LeetCode

    Question

    697. Degree of an Array - LeetCode

    Solution

    理解两个概念:

    数组的度:[1,2,2,3,1]这个数组,去重后的元素为[1,2,3],每个元素在原数组中重复的次数分别是221,数组的度就是元素最大重复次数,这个数组中元素最大重复次数就是2

    连续子数组:和字符串中的了串概念类似,数组元素顺序保持不变,取其中一部分,该题就是求在度相同的情况下最小连续子数组的长度

    思路:数组的度是以元素为对象,每个元素都有一个度(degree),第一次出现的坐标(start),最后一次出现的坐标(end),求出degree最大,end-start最小的那个情况,end-start+1就是该数组最小连续子数组的长度了。

    public int findShortestSubArray(int[] nums) {
        int start = 0;
        int end = 0;
        int degree = 0;
        Map<Integer, Element> numElementMap = new HashMap<>();
    
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i];
            Element element = numElementMap.get(num);
            if (element == null) {
                element = new Element(i, 0);
                numElementMap.put(num, element);
            }
            element.degree++;
            int elementEnd  = i;
    
            // degree最大 end-start最小
            boolean change = i == 0 ? true : false; // 第一个元素要初始化
            if (element.degree >= degree) {
                change = true;
                if (element.degree == degree && (end - start < elementEnd - element.start)) {
                    change = false;
                }
            }
            if (change) {
                start = element.start;
                end = elementEnd;
                degree = element.degree;
            }
    
        }
        return end - start + 1;
    }
    
    class Element {
        int start;
        int degree;
    
        public Element(int start, int degree) {
            this.start = start;
            this.degree = degree;
        }
    }
    

    Reference

  • 相关阅读:
    TapTap推广统计逻辑
    广告推广测试
    背压(Backpressure)机制
    工作相关资料
    ElasticSearch问题记录
    bfrd collector性能排查
    Ubuntu13.10下安装HADOOP
    Hadoop各商业发行版之比较
    Behave用户自定义数据类型
    Behave step matcher
  • 原文地址:https://www.cnblogs.com/okokabcd/p/9159063.html
Copyright © 2011-2022 走看看