java---数组中第K个最大数

2021-05-16  本文已影响0人  android_coder

1:思路分析

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入:
[3,2,1,5,6,4] 和
k = 2
输出: 5
示例 2:
输入:
[3,2,3,1,2,4,5,5,6] 和
k = 4
输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

2:具体实现

对数组进行快速排序

 private static int partation(int[] number, int left, int right) {
        if (number == null || number.length <= 0) {
            return 0;
        }
        int mid = number[left];------------------//基准数
        while (left < right) {
            while (left < right && number[right] > mid) {//从右边开始将小于基准数的放在左边
                right--;
            }
            number[left] = number[right];
            while (left < right && number[left] < mid) {//从左边开始将大于基准数的放在右边
                left++;
            }
            number[right] = number[left];
        }
        number[left] = mid;-----------------//排序完成之后中间的那个元素
        return left;
    }

上面完成之后数组就是一个有序数组了

private static int findKthLargest(int[] number, int k) {
        if (number == null || number.length <= 0 || k > number.length) {
            return 0;
        }
        int left =0;
        int right = number.length -1;
        while (left < right) {
            int pos = partation(number, left, right);-----//有序数组中间元素的index
            if (pos == k -1) {--------------//找到直接跳出循环
                break;
            } else if (pos < k -1) {--------------//如果小于k-1,那么向数组右边继续查找
                left = pos + 1;
            } else {-//如果大于k-1,那么向数组左边继续查找
                right = pos -1;
            }
        }
        return number[k-1];
    }
上一篇下一篇

猜你喜欢

热点阅读