zoukankan      html  css  js  c++  java
  • 5. 第k大元素

    描述

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

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

    样例

    样例 1:

    输入:
    n = 1, nums = [1,3,4,2]
    输出:
    4
    

    样例 2:

    输入:
    n = 3, nums = [9,3,2,4,8]
    输出:
    4
    

     

     

    题解:

    public class Solution {
        /**
         * @param n: An integer
         * @param nums: An array
         * @return: the Kth largest element
         */
        public int kthLargestElement(int k, int[] nums) {
            int n = nums.length;
            // 为了方便编写代码,这里将第 k 大转换成第 k 小问题。
            k = n - k;
            return partition(nums, 0, n - 1, k);
        }
        public int partition(int[] nums, int start, int end, int k) {
            int left = start, right = end;
            int pivot = nums[left];
            
            while (left <= right) {
                while (left <= right && nums[left] < pivot) {
                    left++;
                }
                while (left <= right && nums[right] > pivot) {
                    right--;
                }
                if (left <= right) {
                    swap(nums, left, right);
                    left++;
                    right--;
                }
            }
            
            // 如果第 k 小在右侧,搜索右边的范围,否则搜索左侧。
            if (k <= right) {
                return partition(nums, start, right, k);
            }
            if (k >= left) {
                return partition(nums, left, end, k);
            }
            return nums[k];
        }
        public void swap(int[] nums, int x, int y) {
            int temp = nums[x];
            nums[x] = nums[y];
            nums[y] = temp;
        }
    }
    
  • 相关阅读:
    C语言位运算详解(转载)
    C/C++知识点
    android获取string.xml的值(转)
    C++ Primer与c++编程思想的比较(转)
    C++ 学习的网站
    C++学习网站总结(转)
    C++学习网站(转)
    C++编程学习50个经典网站 强力推荐 (转)
    JAVA反射机制(转)
    AxureRP7.0教学大纲Tutorial directory
  • 原文地址:https://www.cnblogs.com/deepend/p/14199250.html
Copyright © 2011-2022 走看看