如何写一个函数获得一个数组中的第二大数?
https://www.zhihu.com/question/22389585
int find_second_max(const int* data,const int count)
{
if (!count || count == 1)
return -1;
int maxVal = data[0] > data[1] ? data[0] : data[1];
int smaxVal = data[0] + data[1] - maxVal;
int i;
for (i = 2;i < count;i++)
{
if (data[i] > maxVal)
{
smaxVal = maxVal;
maxVal = data[i];
}
else if (data[i] > smaxVal)
smaxVal = data[i];
}
return smaxVal;
}
扩展开来讨论只找第k大的数显然是堆排序,考虑到大根堆和小根堆优化
一般时间复杂度o(n·logk),最差o(n·logn),空间O(k)或者O(n),取决于具体实现的要求
一般时间复杂度o(n·logk),最差o(n·logn),空间O(k)或者O(n),取决于具体实现的要求
浙公网安备 33010602011771号