数组中的第K个最大元素

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.解决思想

2.1先查出最小数的位置(优化是:如果数组长度等于k,直接返回最小值

2.2采用了冒泡排序的思想,每次查出最大的数字,并将其数字放在最后面,每排序一次,下次排序的时候的数组长度减去1(如果交换位置的数字是最小值,调整最小值位置的值

优化1:如果数组长度等于k,直接返回最小值

优化2:最开始是没有采用冒泡排序的,只是用一个map记录下了值,然后找下一个最大值的时候排除掉。采用目前的方法,每次遍历数组的长度都更小,效率更高

3.代码

 public static int findKthLargest(int[] nums, int k) {
        int mix = 0;
        for (int n=0;n<nums.length;n++){
            if(nums[n]<=nums[mix])mix=n;
        }
        if(k==nums.length)return nums[mix];
        for (int i=0;i<k;i++){
            int max = mix;
            for (int j=0;j<nums.length-i;j++){
                if(nums[j]>=nums[max])max=j;
            }
            if(i==k-1)return nums[max];
            if(nums.length-i-1==mix)mix = max;
            int maxValue = nums[max];
            nums[max] = nums[nums.length-i-1];
            nums[nums.length-i-1]=maxValue;
        }
        return 0;
    }

 

posted @ 2019-01-03 15:13  夜宵95  阅读(333)  评论(0编辑  收藏  举报