当前位置: 首页 > 面试题库 >

寻找一数组中前K个最大的数

邓光耀
2023-03-14
本文向大家介绍寻找一数组中前K个最大的数相关面试题,主要包含被问及寻找一数组中前K个最大的数时的应答技巧和注意事项,需要的朋友参考一下

考察点:数组

 

public int findKthLargest(int[] nums, int k) {
    if (k < 1 || nums == null) {
        return 0;
    }
  
    return getKth(nums.length - k +1, nums, 0,nums.length - 1);
}
  
public int getKth(int k, int[] nums, int start, int end) {
  
    int pivot = nums[end];
  
    int left = start;
    int right = end;
  
    while (true) {
  
        while (nums[left] < pivot && left < right) {
            left++;
        }
  
        while (nums[right] >= pivot && right > left) {
            right--;
        }
  
        if(left == right) {
            break;
        }
  
        swap(nums,left, right);
    }
  
    swap(nums, left, end);
  
    if (k == left + 1) {
        return pivot;
    } else if (k < left + 1) {
        return getKth(k, nums, start, left - 1);
    } else {
        return getKth(k, nums, left + 1, end);
    }
}
  
public void swap(int[] nums, int n1, int n2) {
    int tmp = nums[n1];
    nums[n1] = nums[n2];
    nums[n2] = tmp;
}

 

 类似资料:
  • 题目描述 输入n个整数,输出其中最小的k个。 分析与解法 解法一 要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:O(n * log n)+O(k)=O(n * log n)。

  • 本文向大家介绍C#递归算法寻找数组中第K大的数,包括了C#递归算法寻找数组中第K大的数的使用技巧和注意事项,需要的朋友参考一下 1.概述   国人向来喜欢论资排辈的,每个人都想当老大,实在当不成,当个老二,老三,老K也不错,您一定看过这样的争论: 两个人吵架,一个人非常强势,另外一个忍受不住了便说:"你算老几呀?",下面就通过这篇文章就是要解决找出老几的问题! 2.应用场景   在向量V[firs

  • 本文向大家介绍从一个数组中找出前4个最大的数,用最优解。相关面试题,主要包含被问及从一个数组中找出前4个最大的数,用最优解。时的应答技巧和注意事项,需要的朋友参考一下

  • 题目描述 给定若干整数,请设计一个高效的算法,确定第k小的数。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据的第1行输入2个整数n,k(1≤k≤n≤1000000)。第2行输入n个整数,每个数据的取值范围在0到1000000之间。 输出格式: 对于每组测试,输出第k小的数。 输入样例: 5 3 1 2 2 2 1 9 3 1 2 3 4 5 6 9 8 7 输出样例: 2 3 提示: 如

  • 我试图找到给定排序数组的最大K数。 ex:输入- 到目前为止,我编写的代码返回最大的K元素,但它需要返回最大的K数字。任何帮助都将不胜感激。

  • 假设您给出了一个大小为N的数组,它可以有正数和负数。我们需要返回总和的最大子数组的长度等于k。我尝试使用滑动窗口算法,但很快我发现它在这里不起作用,因为数组元素可以有正负整数。 例如: arr=[-20,-38,-4,-7,10,4]和k = 3很明显,有两个可能的子阵列([-4,-7,10,4]和[-7,10]),它们的和等于给定的k。因此输出将是4(最大子阵列的长度) 蛮力方法将采取O(n^2