挑战面试编程:查找数组中第k大的数

news/2024/5/19 21:45:23 标签: 快速排序, Partition, Kth, 面试

查找数组中第k大的数

问题:
查找出一给定数组中第k大的数。例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8……

思路:
1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]。
2. 只需找到第k大的数,不必把所有的数排好序。我们借助快速排序中partition过程,一般情况下,在把所有数都排好序前,就可以找到第k大的数。我们依据的逻辑是,经过一次partition后,数组被pivot分成左右两部分:S左、S右。当S左的元素个数|S左|等于k-1时,pivot即是所找的数;当|S左|小于k-1,所找的数位于S右中;当|S左|>k-1,所找的数位于S左中。显然,后两种情况都会使搜索空间缩小。

代码:

int Partition(int *arr, int from, int to)
{
    int i, j;
    i = j = from;
    while (j <= to)
    {
        if (arr[j] >= arr[to]) {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
        }
        j++;
    }
    return i - 1;
}
int quickSelect(int *s, int k, int left, int right)
{
    if (left == right) return s[left];
    int i;
    i = Partition(s, left, right);
    if (i - left + 1 == k) {
        return s[i];
    }
    else if (i - left + 1 < k) {
        return quickSelect(s, k - (i - left + 1), i + 1, right);
    }
    else return quickSelect(s, k, left, i - 1);
}
int findKthLargest(int* nums, int numsSize, int k) {
    return quickSelect(nums, k, 0, numsSize - 1);
}

至于”查找数组中第k小的数“,那自然可以举一反三,同样处理了。

代码下载:查找数组中第k大的数

所有内容的目录

  • CCPP Blog目录

http://www.niftyadmin.cn/n/1802090.html

相关文章

CCPP Blog 目录

CCPP Blog 目录 专栏目录 数据结构与算法C指针C拾遗挑战面试编程 十六进制数转化为八进制数链表逆转的多种实现字符串匹配的双重递归式写法原码、反码、补码字符串替换字符串包含回文串、回文数字单词翻转、高斯公式、魔方矩阵、黑白球、3n1最大连续子序列和字符串转换为整数计…

C语言运行顺序和内存就地分配原则

不知道&#xff0c;为什么会出现这样的结果&#xff1f;答&#xff1a;此问题从二个方面解答&#xff1a;1> 编译器是上古三大神器的编译器之一&#xff0c;不带有任何只能辅助系统。2>本程序在语法没有任何问题&#xff0c;但是根据C语言编译语句自上而下 和 内存就地分…

编程中的问题

int arr[n]{1,2,3,4,5,6,7,8,9,11}?这个 N的值 是如何传来滴&#xff01;

vi 與 vim 的指令整理

&#xfeff;&#xfeff;vi 與 vim 的指令整理转自&#xff1a;http://www.vixual.net/blog/archives/tag/linuxvi 是 unix 家族下最功能強大的文字編輯器&#xff0c;讓用戶只要使用一個鍵盤就可以完成所有的編輯。而 vim 則是 vi 的加強版&#xff0c;甚至在 Windows 上也找…

在Windows 10下搭建Ubuntu Linux+GCC开发平台

&#xfeff;&#xfeff;在Windows 10下搭建Ubuntu LinuxGCC开发平台 2017年06月02日 14:40:11 1351人阅读 评论(1) 收藏 举报 目录(?)[-]第一步启用Linux子系统功能第二步启用开发人员模式第三步下载Linux子系统此步涉及到过程中最最最大的难点耐性第四步进入子系统第五…

Ubuntu下gcc安装及使用

&#xfeff;&#xfeff;Ubuntu下gcc安装及使用 2016年06月21日 10:58:37 29486人阅读 评论(2) 收藏 举报 分类&#xff1a; Ubuntu&#xff08;6&#xff09; 作者同类文章 X 目录(?)[]一安装二编译在Ubuntu下安装GCC和其他一些Linux系统有点不一样。一、安装方法一&a…

unix文件和目录【转载】

&#xfeff;&#xfeff;unix文件和目录原创 2015年07月12日 15:04:41 标签&#xff1a;unix /文件系统 /操作系统 /805编辑 删除 文件系统是存储数据的基础&#xff0c;对于一个操作系统来说至关重要&#xff0c;unix支持多种文件系统&#xff0c;各文件系统的特性有所不同…

【转载】在Windows 10下搭建Ubuntu Linux+GCC开发平台

&#xfeff;&#xfeff;在Windows 10下搭建Ubuntu LinuxGCC开发平台 2017年06月02日 14:40:11 1398人阅读 评论(1) 收藏 举报 目录(?)[]第一步启用Linux子系统功能第二步启用开发人员模式第三步下载Linux子系统此步涉及到过程中最最最大的难点耐性第四步进入子系统第五…