首先还是来分析一下这道题:Note that it is the kth largest element in the sorted order, not the kth distinct element.
那么要设置一个方法,传入kth(第k大)和一个数组,然后返回无序数组里第k大的元素
然后定义这个方法的时候我发现,只要用一个排序把无序的数组从大到小排成有序的那不就简单了?
我就写了个排序:
<pre name="code" class="cpp">//把无序的数列从大到小排序;
int maxNum = nums[0];
for (auto i = nums.begin(); i != nums.end(); i++)
{
for (auto j = i + 1; j != nums.end(); j++)
{
if (*j > *i)
{
maxNum = *j;
*j = *i;
*i = maxNum;
}
}
}
运行起来后我发现如果有重复的元素就会出现错误的结果,于是我把重复的元素去掉再存入一个新容器就好了:
//为避免有重复的元素从而造成结果错误,
//再创建一个vector存入nums排序后的值,并去掉重复的元素
vector<int> tempNums;
//设置两个相邻的数作比较,若相同则不存,反之则存
auto curNum = nums.begin();
auto nextNum = curNum + 1;
for ( ; nextNum != nums.end(); curNum++, nextNum++)
{
if (*curNum != *nextNum)
tempNums.push_back(*curNum);
}
tempNums.push_back(*curNum);//存入尾元素
return tempNums[k - 1];