原题网址:http://www.lintcode.com/zh-cn/problem/kth-largest-element/

在数组中找到第k大的元素

注意事项

你可以交换数组中的元素的位置

您在真实的面试中是否遇到过这个题?

Yes
样例

给出数组 [9,3,2,4,8],第三大的元素是 4

给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推

挑战

要求时间复杂度为O(n),空间复杂度为O(1)

标签

 
非挑战AC代码:
int kthLargestElement1(int n, vector<int> &nums)
{
if (n<=||n>(int)nums.size())
{
return NULL;
}
sort(nums.begin(),nums.end());
reverse(nums.begin(),nums.end());
return nums[n-];
}

挑战:要求时间复杂度为O(n),空间复杂度为O(1)

参考  https://blog.csdn.net/lhanchao/article/details/52087101

对数组利用快速排序从大到小排序的思想,找到每一次快速排序时基准数的下标(基准数的下标即为排序好后该数的真实下标),直到找到下标为k-1的数为止。(具体怎么算时间复杂度我也不太清楚,还要学习,网上说这种算法的时间复杂度为O(n))

class Solution {
public:
/*
* @param n: An integer
* @param nums: An array
* @return: the Kth largest element
*/
int kthLargestElement(int n, vector<int> &nums) {
// write your code here
if (n>(int)nums.size())
{
return NULL;
}
int left=;
int right=nums.size()-; while()
{
int result=quickSort(nums,left,right);
if (result==n-)
{
return nums[result];
}
else if (result>n-)
{
right=result-;
}
else
{
left=result+;
}
}
} int quickSort(vector<int> &nums,int left,int right)
{
int i=left;
int j=right;
int temp=nums[i];
while (i<j)
{
while(i<j&&temp>=nums[j])
{
j--;
}
if (i<j)
{
nums[i]=nums[j];
i++;
}
while(i<j&&temp<nums[i])
{
i++;
}
if (i<j)
{
nums[j]=nums[i];
j--;
}
}
nums[i]=temp;
return i;
}
};
 
 

最新文章

  1. C语言 &#183; 最小乘积(基本型)
  2. [转]Windows进程间通信的各种方法
  3. firefox的plugin-container进程关闭方法
  4. 三维网格去噪算法(L0 Minimization)
  5. Bindless Textures
  6. ubuntu install wine
  7. Delphi深度探索-CodeSite应用指南
  8. News: Visual Studio Code support debugging Linux Apps
  9. cxf 动态创建客户端,局域网能正常调用服务端,外网不能访问
  10. Ehcache专栏
  11. php学习笔记--高级教程--读取文件、创建文件、写入文件
  12. Docker集群实验环境布署--swarm【4 管理组件--manager】
  13. Ionic3 创建应用后,目录结构
  14. Problem D: 栈小游戏
  15. 本地计算机上的OracleOraDb10g_home1TNSListener服务启动后又停止了..........解决办法
  16. kafka依赖zookeeper原因解析及应用场景
  17. 4.14Python数据处理篇之Matplotlib系列(十四)---动态图的绘制
  18. 安全检查,Windows更新出现8024402F错误如何解决
  19. python练习题_04
  20. Could not create SSL/TLS secure channel.

热门文章

  1. Python: 比较两个字典是否相等
  2. [课后作业] 第001讲:我和Python的第一次亲密接触 | 课后测试题的答案
  3. HTML语法检测
  4. shell命令 安装软件包
  5. SHELL脚本中执行SQL语句操作MYSQL的5种方法
  6. JS鼠标经过
  7. delphi 第4课
  8. leetcode-241-为运算表达式设置优先级*
  9. socket 上传文件
  10. thinkphp 页面Trace信息