zoukankan      html  css  js  c++  java
  • lintcode 中等题:kth-largest-element 第k大元素

    题目

    第k大元素

    在数组中找到第k大的元素

    样例

    给出数组[9,3,2,4,8]第三大的元素是4

    给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推

    注意

    你可以交换数组中的元素的位置

    挑战

    要求时间复杂度为O(n),空间复杂度为O(1)

    解题

    理论快速排序的思想,每次都减半,这个时间复杂度也是O(N),至于为什么就不知道了

    class Solution {
        /*
         * @param k : description of k
         * @param nums : array of nums
         * @return: description of return
         */
        public int kthLargestElement(int k, int[] nums) {
            // write your code here
            return quickSort(nums,0,nums.length-1,k);
            
        }
        public int quickSort(int[] nums,int left,int right,int k){
            int i = left;
            int j = right;
            int tmp = nums[i];
            while(i<j){
                while(i<j && tmp>=nums[j]) j--;
                if(i<j){
                    nums[i]=nums[j];
                    i++;
                }
                while(i<j && tmp<nums[i]) i++;
                if(i<j){
                    nums[j]=nums[i];
                    j--;
                }
                
            }
            if(i == k -1){
                return tmp;
            }else if(i< k-1){
                return quickSort(nums,i+1,right,k);
            }else{
                return quickSort(nums,left,i-1,k);
            }
        }
    };
    View Code

    Python

    class Solution:
        # @param k & A a integer and an array
        # @return ans a integer
        def kthLargestElement(self, k, A):
            return self.quickSort(A,0,len(A)-1,k)
            
        def quickSort(self,nums,left,right,k):
            i = left
            j = right
            tmp = nums[i]
            while i<j:
                while i<j and tmp>=nums[j]:
                    j -= 1
                if i<j:
                    nums[i] = nums[j]
                    i += 1
                while i<j and tmp< nums[i]:
                    i += 1
                if i<j:
                    nums[j] = nums[i]
                    j -= 1
            if i == k-1:
                return tmp
            elif i< k-1:
                return self.quickSort(nums,i+1,right,k)
            else:
                return self.quickSort(nums,left,i-1,k)
    Python Code
  • 相关阅读:
    第九章:switch语句
    第八章:if-else语句
    第七章:运算符及运用
    第六章:名命规范
    事务
    jdbc
    Object
    容器
    Java exception
    Java OO1
  • 原文地址:https://www.cnblogs.com/theskulls/p/5097312.html
Copyright © 2011-2022 走看看