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;
        }
    
  • 相关阅读:
    超参数调试、Batch正则化和程序框架
    优化算法
    深度学习的实用层面
    深层神经网络
    浅层神经网络
    一些实用的JavaScript代码
    mysql练习题1-41
    python 练习题(16-20)
    fiddler抓取https请求
    haproxy监控页面添加及参数简介(转)
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4564601.html
Copyright © 2011-2022 走看看