zoukankan      html  css  js  c++  java
  • Leetcode 215.数组中的第k个最大元素

    数组中的第k个最大元素

    在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

    示例 1:

    输入: [3,2,1,5,6,4] 和 k = 2

    输出: 5

    示例 2:

    输入: [3,2,3,1,2,4,5,5,6] 和 k = 4

    输出: 4

    说明:

    你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

     1 class Solution {
     2     public int findKthLargest(int[] nums, int k) {
     3         int begin=0;
     4         int end=nums.length-1;
     5         k=nums.length+1-k;
     6         while(begin<end){
     7             int pos=partition(nums,begin,end);
     8             if(pos==k-1) break;
     9             else if(pos<k-1) begin=pos+1;
    10             else end=pos-1;
    11         }
    12         return nums[k-1];
    13     }
    14     public int partition(int[] nums, int low, int high) {//分区
    15         int key;
    16         if (low > high) {
    17             return 0;
    18         }
    19         key = nums[low]; // 用子表的第一个记录做基准
    20         while (low < high) { // 从表的两端交替向中间扫描
    21             while (low < high && nums[high] >= key)
    22                 high--;
    23             if (low < high)
    24                 swap(nums,low,high);// 用比基准小的记录替换低位记录
    25             while (low < high && nums[low] < key)
    26                 low++;
    27             if (low < high) // 用比基准大的记录替换高位记录
    28                 swap(nums,low,high);
    29         }
    30         return low;
    31     }
    32 
    33     private void swap(int[] a, int i, int j) {
    34         int t = a[i];
    35         a[i] = a[j];
    36         a[j] = t;
    37     }
    38 }
  • 相关阅读:
    Lucene 3.5 提供深度分页支持 searchAfter方法 方法的应用
    如何解决ORA12547错误
    sde 安装
    软件安装之arcsde10.0集群
    Linux 64bit下Oracle11g安装手册
    Lucene 3.5 提供深度分页支持 searchAfter方法 方法的应用
    Creating a Feature Set via C#
    sde 安装
    9.15
    9.18
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10203044.html
Copyright © 2011-2022 走看看