题目地址:https://leetcode-cn.com/problems/degree-of-an-array/submissions/
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; }