当前位置 博文首页 > zcy_wxy的博客:215. 数组中的第K个最大元素

    zcy_wxy的博客:215. 数组中的第K个最大元素

    作者:[db:作者] 时间:2021-07-21 21:44

    这道题主要思路是 根据k的值得大小来决定是从左边开始冒泡还是从后边开始冒泡,代码如下

    package easy;
    
    public class FindKthLargest {
        public static void main(String[] args) {
            System.out.println(new FindKthLargest().findKthLargest(new int[]{3,2,1,5,6,4},1));
        }
        public int findKthLargest(int[] nums, int k) {
            int len=nums.length;
            if (k*2<len){
                return bubbleRight(nums,k,len);
            }
            return bubbleLeft(nums,len-k+1,len);
        }
    
        private int bubbleLeft(int[] nums, int k, int len) {
            int min;
            int lastIndex;
            for (int i = 0; i < k; i++) {
                min=nums[i];
                lastIndex=-1;
                for (int j = i; j < len; j++) {
                    if (nums[j]<min){
                        min=nums[j];
                        lastIndex=j;
                    }
                }
                if (lastIndex<0){
                    continue;
                }
                nums[lastIndex]=nums[i];
                nums[i]=min;
            }
            return nums[k-1];
    
        }
    
        private int bubbleRight(int[] nums, int k, int len) {
            int max;
            int lastIndex;
            int end=len;
            for (int i = 0; i < k; i++) {
                lastIndex=-1;
                max=nums[end-1];
                for (int j = 0; j < end; j++) {
                    if (nums[j]>max){
                        max=nums[j];
                        lastIndex=j;
                    }
                }
                if (lastIndex<0){
                    continue;
                }
                nums[lastIndex]=nums[len-i-1];
                nums[len-i-1]=max;
                end--;
            }
            return nums[len-k];
        }
    }
    

    ?

    cs