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;
}