网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array

传送门

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

测试样例:

[1,3,5,2,2],5,3
返回:2

note:

注意手写快排的时候:

        while(i < j) {
            while(j > i && a[j] > a[left]) j--;
            while(i < j && a[i] <= a[left]) i++;
            if(i < j) {
                swap(a[i],a[j]);
            }
        }

while(j > i && a[j] > a[left]) j--;
while(i < j && a[i] <= a[left]) i++;

这两个顺序不能反了,不然下标会错位一个
 1 class Finder {
 2 public:
 3     int findKth(vector<int> a, int n, int K) {
 4         // write code here
 5         return quickfind(a,0,n - 1,K);
 6     }
 7
 8     int quickfind(vector<int> &a,int left,int right,int K) {
 9         int i = left,j = right;
10         while(i < j) {
11             while(j > i && a[j] > a[left]) j--;
12             while(i < j && a[i] <= a[left]) i++;
13             if(i < j) {
14                 swap(a[i],a[j]);
15             }
16         }
17         swap(a[left],a[i]);
18         int dis = right - i + 1;
19         if(dis == K){
20             return a[i];
21         }
22         else if(K < dis) {
23             return quickfind(a,i + 1,right,K);
24         }
25         else{
26             return quickfind(a,left,i - 1 ,K - dis);
27         }
28     }
29 };

--------------------------------------------------

leetcode:

传送门

215. Kth Largest Element in an Array

QuestionEditorial Solution

My Submissions

  • Total Accepted: 67793
  • Total Submissions: 195182
  • Difficulty: Medium

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

Note: 
You may assume k is always valid, 1 ≤ k ≤ array‘s length.

Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Hide Tags

Heap Divide and Conquer

Show Similar Problems

 1 class Solution {
 2 public:
 3     int findKthLargest(vector<int>& nums, int k) {
 4         return quickfind(nums,0,nums.size() - 1,k);
 5     }
 6
 7     int quickfind(vector<int> &a,int left,int right,int K) {
 8         int i = left,j = right;
 9         while(i < j) {
10             while(j > i && a[j] > a[left]) j--;
11             while(i < j && a[i] <= a[left]) i++;
12             if(i < j) {
13                 swap(a[i],a[j]);
14             }
15         }
16         swap(a[left],a[i]);
17         int dis = right - i + 1;
18         if(dis == K){
19             return a[i];
20         }
21         else if(K < dis) {
22             return quickfind(a,i + 1,right,K);
23         }
24         else{
25             return quickfind(a,left,i - 1 ,K - dis);
26         }
27     }
28 };
时间: 2024-10-16 07:19:31

网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array的相关文章

网易2016实习研发工程师编程题

牛客网上的题 1 比较重量 小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量.这些钻石的重量各不相同.在他们们比较了一段时间后,它们看中了两颗钻石g1和g2.现在请你根据之前比较的信息判断这两颗钻石的哪颗更重. 给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号.最后给定之前的比较次数n.请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0.输入

寻找第K大 网易2016实习研发工程师编程题

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2,2],5,3 返回:2 投机取巧能通过: 1 class Finder { 2 public: 3 int findKth(vector<int> a, int n, int K) { 4 // write code here 5 sort(a.begin(), a.end()); 6 return

网易2016 实习研发工程师 [编程题]二叉树

传送门 有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离.二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离. 给定二叉树的根节点root,请返回所求距离. 题解: 给每个节点编号(0 - total),用map记录每个节点的父节点 找出最大权值叶子节点 和 最小权值 叶子节点的编号 然后就是寻找最近公共祖先了 1 /* 2 struct TreeNode { 3 int val; 4 struct Tree

比较重量 网易2016实习研发工程师编程题

题目: 小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量.这些钻石的重量各不相同.在他们们比较了一段时间后,它们看中了两颗钻石g1和g2.现在请你根据之前比较的信息判断这两颗钻石的哪颗更重. 给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第 二个元素为较轻的钻石的编号.最后给定之前的比较次数n.请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0.输入数据保证合 法,不

leetcode 215. Kth Largest Element in an Array 寻找第k个大的数---------- java

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. For example,Given [3,2,1,5,6,4] and k = 2, return 5. Note: You may assume k is always valid, 1 ≤ k ≤ array's

网易 2016 实习研发工程师 3道 编程题-2

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离.二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离. 给定二叉树的根节点root,请返回所求距离. //import java.util.ArrayList;   //import java.util.HashMap;   //import java.util.Iterator;   //import java.util.LinkedList;   //imp

网易 2016 实习研发工程师 3道 编程题-1

小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量.这些钻石的重量各不相同.在他们们比较了一段时间后,它们看中了两颗钻石g1和g2.现在请你根据之前比较的信息判断这两颗钻石的哪颗更重. 给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号.最后给定之前的比较次数n.请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0.输入数据保证合法,不会有矛盾情况

刷题215. Kth Largest Element in an Array

一.题目说明 题目215. Kth Largest Element in an Array,在一个无序数组中找第k大的元素.难度是Medium! 二.我的解答 这个题目最直观的解答是,先对数组排序,然后直接返回: class Solution{ public: int findKthLargest(vector<int>& nums,int k){ sort(nums.begin(),nums.end()); return nums[nums.size()-k]; } }; 性能如下:

求职 | 华为研发工程师编程题个人题解【C++】【Python】

华为研发工程师编程题[C++][Python][数学][数组][字符串] 问题1 有这样一道智力题:"某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?"答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子.然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板.如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 输入描述: 输入文件最多包