题目地址: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;
}