int findShortestSubArray(int* nums, int numsSize){ int i,j,max=0,pst=0,minLen=50001; int hash[50000]={0}, startPst[50000], endPst[50000]={0}; memset(startPst,-1,sizeof(int)*50000); for(i=0; i<numsSize; i++){ ++hash[nums[i]]; if(startPst[nums[i]]==-1) startPst[nums[i]]=i; else if(hash[nums[i]] >= max){ endPst[nums[i]]=i; if(hash[nums[i]] > max || hash[nums[i]]==max && endPst[nums[i]]-startPst[nums[i]]+1 < minLen) minLen=endPst[nums[i]]-startPst[nums[i]]+1; max=hash[nums[i]]; } } return (minLen!=50001)?minLen :1; }