zoukankan      html  css  js  c++  java
  • Java for LeetCode 215 Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

    For example,
    Given [3,2,1,5,6,4] and k = 2, return 5.

    解题思路:

    本题是《算法导论》原题,9.2节用归并的思路给出了时间复杂度为O(n)的算法,9.3节给出了最坏时间为O(n)的算法(就是讨论区的第一个),实现起来比较麻烦(笔者提交Wrong Answer了几次,不想搞了),本题最简单的快排即可实现,JAVA实现如下:

        public int findKthLargest(int[] nums, int k) {
            Arrays.sort(nums);
            return nums[nums.length-k];
        }
    

     另外,网上看人用归并排序,传送如下:

        public int findKthLargest(int[] nums, int k) {
            return findK(nums, nums.length-k, 0, nums.length-1);
        }
        
        private int findK(int[] nums, int k, int i, int j) {
            if(i>=j) return nums[i];
            int m = partition(nums, i, j);
            if(m==k) return nums[m];
            else if(m<k) {
                return findK(nums, k, m+1, j);
            } else {
                return findK(nums, k, i, m-1);
            }
        }
        
        private int partition(int[] nums, int i, int j) {
            int x = nums[i];
            int m = i;
            int n = i+1;
            
            while(n<=j){
                if(nums[n]<x) {
                    swap(nums, ++m, n);
                }
                ++n;
            }
            swap(nums,i, m);
            return m;
        }
        
        private void swap(int[] nums, int i, int j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    
  • 相关阅读:
    [BZOJ]2959: 长跑
    http状态码 超详细
    mysql注入常用函数
    tomcat7远程代码执行 ImageMagick 命令执行漏洞
    kali安装redis
    反序列化
    CSP 之dvwa
    token防爆破?
    变量覆盖
    安全狗绕过
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4564601.html
Copyright © 2011-2022 走看看