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;
        }
    
  • 相关阅读:
    WebStorm 9 配置 Live Edit 功能与浏览器实现同步
    开源JS图片裁剪插件
    cropper手机使用实例
    Laravel中的Storage::disk
    laravel删除文件
    cropper.js移动端使用
    资本的一些运作规律及启示
    laravel文件存储、删除、移动等操作
    解决div和父div不上对齐
    ubuntu14.04如何卸载qq
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4564601.html
Copyright © 2011-2022 走看看