`
dugu108
  • 浏览: 23315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

找出数组中第k小的元素

 
阅读更多

给定一无序整型数组a,在不排序的情况下,查找第k小的元素

类似快排。

如果k非常小比如小于3,觉得应该用几个临时变量然后遍历一遍解决。

 

public class MinKth {
    public static int calculate(int[] array, int k) {
        return calculate(array, k, 0, array.length - 1);
    }

    public static int calculate(int[] array, int k, int low, int high) {
        int target = array[low];
        int i = low;
        int j = high;

        while (i < j) {
            while (i <= high && array[i] <= target) {
                i++;
            }
            while (j >= low && array[j] > target) {
                j--;
            }

            if (i < j) {
                int tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
            }
        }

        int tmp = array[j];
        array[j] = array[low];
        array[low] = tmp;

        int gap = i - low + 1;
        if (gap > k)
            return calculate(array, k, low, i - 1);
        if (gap < k)
            return calculate(array, k - gap, i + 1, high);
        else
            return array[i];
    }
}

 

分享到:
评论

相关推荐

    寻找数组中第k大的元素

    寻找数组中第k大的元素,基于快速排序思想,实践复杂度为O(n)

    求数列中的第1~k小元素

    设计算法实现在一个具有在n各互不相同元素的数组A[1…n]中找出所有前k个最小元素的问题,这里k不是常量,即它是输入数据的一部分。要求算法的时间复杂性为Θ(n)。 2. 具体要求 输入的第一行是一个正整数m,表示测试...

    算法中最小K元素的选择问题

    可以运行的查找第K小元素的实现代码。并且实现了多个元素相同的算法。与王晓东的《算法》配套

    从两个数组中找最大元素

    *功能:从两个排好序的数组A[1..m]、B[1..n]中 *找出第K大的元素。 *时间复杂度为O(lg(m)+lg(n))

    求有N个元素的数组中前k个最大的数?(N>=k)(python实现)

    由于只需要找出前k大的数,因此没必要对数组中所有的元素排序,可以采用部分排序的方式。具体思路为:第一次先遍历数组找到最大的数,第二次遍历从剩下的数组中找到最大的数(在整个数组中第二大的数)…共需遍历k次...

    线性时间选择算法(附完整的代码,结合例题详细解析) 全套资源已打包好,求抱走!!!

    给定一个包含n个元素的一维线性序列a[p:r],从这n个元素中找出第k小的元素,1&lt;=k。设a[0:14]={2,9,11,3,14,7,10,8,15,4,13,1,6,5,12},k = 8,采用线性时间选择算法解决该问题。 1)写出算法实现代码并截屏程序运行...

    FINDARRAY:在另一个数组中找到一个数组。-matlab开发

    FINDARRAY 在另一个数组... I = FINDARRAY(A,B,'all') 返回一个 NDIMS(B)+1 维数组,例如I(:,...,k) 包含 A 中每个元素的第 k 个绝对索引B,否则为 0。 另见 find, ismember 例子: &gt;&gt; findarray(pascal(3),magic(2

    问题描述:求从1~n的正整数中取出k(k<=n)个不重复整数的所有组合.pdf

    分析:求解k个数的不同...素是不重复的,可以约定其递增排列,因为数组中的元素是递增排列的: 所以a[k-1]即组合中的最后一个数,只能为k~n 令i=a[k-1] 则 i&gt;=k && i 完整代码请参考我的博客文章,这里只是核心部分

    python查找第k小元素代码分享

    def _partition(A, l, r, i): “””以A[i]为主元划分数组A[l..r],使得: A[l..m-1] &lt;= A[m] &lt; A[m+1..r] “”” A[i], A[r] = A[r], A[i] # i交换到末位r,作为主元 pivot = A[r] # 主元 m = l # 索引...

    AmazonProblems:练习来自亚马逊的问题

    给出一个二叉搜索树,编写一个程序以打印第k个最小元素,而不使用任何静态/全局变量。 您也可以将值k传递给任何函数。 7.给您一些数组中的硬币面额(intdenom []),并无限供应它们。 给定数量(整数),找到获得...

    C++实现的O(n)复杂度内查找第K大数算法示例

    所以我们需要找出数组中最大的三个数的乘积m,然后与数组中最小的两个数相乘再与最大的数相乘的结果n,然后比较m,n,选出最大的数即为最终的结果。 参考代码://www.jb51.net/article/121189.htm 实现代码: #...

    php求正负数数组中连续元素最大值示例

    php实现正负数数组最大子序列,要求给出数组,该数组由正负数字组成,找出该数组中连续元素组成的子数组的最大值。这其实得算是个背包变种吧。 复制代码 代码如下:&lt;?php$list = array(1,-3,-5,-7,8,9,-11,5); $...

    leetcode数组下标大于间距-my-algorithm:我的算法

    找出数组中重复的数字 删除排序数组中的重复项,在原数组上操作 有序数组两数之和 移除数组中所有值为val的元素 调整数组顺序使奇数位于偶数前面 数组中出现次数超过一半的数字 最小的k个数 数组中的第K个最大元素 ...

    leetcode中国-Array:用Java练习数组

    两数组找出唯一不同的元素 FindMaxRecursion 递归求最大值 FindMaxDiff 找最大差值(动态规划) FindMinAbs 求绝对值最小数 FindMinDistance 求两元素最小距离 FindFirstIndex 找第一次出现位置下标 CombineAWithB ...

    Python寻找两个有序数组的中位数实例详解

    2.如果我们去掉其中一个数组比中位数小的k个数,再去掉另一个数组中比中位数大的k个数,得到的合并子数组的中位数和原来的中位数相同。 eg:[1,2,3],[1,2,3] =&gt; [1,1,2,2,3,3] 根据定理去除元素[2,3],[1

    求出乱序中最小k的位置-java

    如何从N个乱序数据中,快速地找出第K小的数? 有数据 2,6,3,5,7,9,找出最小k的位置,k为用户输入(不能超过数组范围)超过返回-1; 解析思路: 了解什么是快速排序,因为我没写快速排序的文章所以我在这里简单介绍一下...

    leetcode答案-hello-algo:算法训练,ContinueFighting

    找出数组中重复的数字() 找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中...

    leetcode数组中元素出现次数-Interview-Prepration:包含重要问题和面试概念的存储库

    找出不同之处 嘶嘶声 相等数组元素的最小移动量 II 子阵列总和等于 K 回文子串 链表循环 链表中间 链表周期 II 有效的括号字符串 使用队列实现堆栈 使用栈实现队列 滑动窗口最大值 设计循环队列 NQueens 数独解算器 ...

    求两个数组的交集,配合去重方法使用.html

    // 循环拿出arr1数组中的每一个数据 /* 第一次调用 item = 1 arr2.indexOf(item) !== -1 === arr2.indexOf(1) !== -1 条件不成立 不会把item返回到新的数组,进性下一次调用filter 第二次调用 item = 2 arr...

Global site tag (gtag.js) - Google Analytics