真的是使用极其笨拙的方法把这个问题搞定的,写了60多行,总觉得怪怪的…
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
int len=nums.size();
vector<int> t;
vector<int> nums1=nums;
//排序
sort(nums.begin(),nums.end());
int max=1,count=1,i=0;;
//寻找最大的度的值
while(i<len)
{
int j=i;
while(nums[j]==nums[j+1] && j<len-1)
{
count++;
j++;
}
if(count>max)
max=count;
count=1;
i=j+1;
}
count=1;
i=0;
//把所有度数和最大度数相同的数放入t中
while(i<len)
{
int j=i;
while(nums[j]==nums[j+1] && j<len-1)
{
count++;
j++;
}
if(count==max)
{
t.push_back(nums[j]);
}
count=1;
i=j+1;
}
int min=len;
//寻找t中的每个数的起始位置和最后的位置,并求出长度
for(int i=0;i<t.size();i++)
{
int start=0,over=len-1;
for(int j=0;j<len;j++)
{
if(nums1[j]!=t[i])
continue;
start=j;
int k=0;
while(nums1[len-k-1]!=t[i])
{
k++;
}
over=len-k-1;
break;
}
//比较min和当前求出的最小长度的大小
if(over-start+1<min)
min=over-start+1;
}
return min;
}
};