如何写一个函数获得一个数组中的第二大数?

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),取决于具体实现的要求

posted on 2017-10-21 15:13  小西红柿  阅读(122)  评论(0)    收藏  举报

导航