zoukankan      html  css  js  c++  java
  • 697. 数组的度

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

    代码地址:https://github.com/javartisan/edx-ds/blob/master/src/main/java/com/javartisan/leetcode/Solution697.java 

    import java.util.Arrays ;
    
    class Solution {
        
        
        
        public int findShortestSubArray(int[] nums) {
            
        
            int size = nums.length;
            int max=-1;
            for(int i =0;i<size ;i++){
                if(nums[i]>max){
                    max=nums[i];
                }
            }
            
            int[][] mtx =new int[max+1][3];
            
            for(int i=0;i<size;i++){
                int value = nums[i];
                int index = i+1;
               int[] startEndCount = mtx[value];
                if(startEndCount[0]==0){
                    startEndCount[0]=index;
                }else{
                    startEndCount[1]=index;
                }
                startEndCount[2]= startEndCount[2]+1;
            }
            
            int maxCount=-1;
            int returnSize = 0;
            for(int i=0;i<max+1;i++){
                if(mtx[i][2]>maxCount){
                    maxCount=mtx[i][2];
                    returnSize = mtx[i][1]-mtx[i][0]+1;
                }else if(mtx[i][2]==maxCount&&(mtx[i][1]-mtx[i][0]+1)<returnSize){
                   returnSize= mtx[i][1]-mtx[i][0]+1;
                }
            }
        
            
            return returnSize<=0?1:returnSize;
            
        }
        
    }
    

      

    优化数组空间:

          // 优化数组的空间
          public int findShortestSubArray(int[] nums) {
             
             int min=Integer.MAX_VALUE;
             int max=Integer.MIN_VALUE;
             int size = nums.length;
             
             for(int i=0;i<size ; i++){
                max = Math.max(max,nums[i]);
                min = Math.min(min,nums[i]);
             }
             
             // 优化数组的使用空间
             int tabSize = max-min+1;
             int[][] mtx = new int[tabSize][3];
             
             for(int i=0;i<size;i++){
                int value = nums[i]-min;
                int index = i+1;
                int[] startEndCount = mtx[value];
                if(startEndCount[0]==0){
                    startEndCount[0]=index;
                }else{
                    startEndCount[1]=index;
                }
                startEndCount[2]= startEndCount[2]+1;
            }
            
            int maxCount=-1;
            int returnSize = 0;
            for(int i=0;i<tabSize;i++){
                if(mtx[i][2]>maxCount){
                    maxCount=mtx[i][2];
                    returnSize = mtx[i][1]-mtx[i][0]+1;
                }else if(mtx[i][2]==maxCount&&(mtx[i][1]-mtx[i][0]+1)<returnSize){
                   returnSize= mtx[i][1]-mtx[i][0]+1;
                }
            }
        
            
            return returnSize<=0?1:returnSize;
         }
    

      

  • 相关阅读:
    linux中如何修改文件夹的用户权限 chown命令
    httpserver
    协程
    进程和线程的区别和联系
    python线程的GIL问题(全局解释器锁)
    线程同步互斥的方法
    threading模块创建线程
    信号量(信号灯)
    信号通道
    内存共享
  • 原文地址:https://www.cnblogs.com/leodaxin/p/11253480.html
Copyright © 2011-2022 走看看