zoukankan      html  css  js  c++  java
  • 数组中的第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 ≤ 数组的长度。

    解析:注意这道题中说的是k个元素是可以相同的,那么是可以用小顶堆来做的。 

    假设小顶堆的大小为k,那么堆顶就为第k个元素

    时间复杂度为 新建堆的大小1/2 * k * logk

    遍历 (n - k)*logk

    总时间复杂度为nlogk的级别

    class Solution {
        public int findKthLargest(int[] nums, int k) {
            int[] arr = new int[k];
            int len = nums.length;
            for (int i = 0; i < k; i++) {
                arr[i] = nums[i];
            }
            init(arr);
            for (int i = k; i < len; i++) {
                if (nums[i] < arr[0]) {
                    continue;
                } else {
                    arr[0] = nums[i];
                    down(arr, 0);
                }
            }
            return arr[0];
        }
    
        
        public void init(int[] data)
        {
            int len = data.length;
            for (int i = len/2 - 1; i >= 0; i--) {
                down(data, i);
            }
        }
        
        public void down(int[] data, int root)
        {
            int head = root;
            int headval = data[root];
            int left = head * 2 + 1;
            int right = left + 1;
            int next = left;
            int len = data.length;
            while (left < len) {
                if (right < len && data[right] < data[left]) {
                    next = right;
                }
                if (data[next] < headval) {//注意这里,一直是和headval做比较的
                    data[head] = data[next];
                } else {
                    break;
                }
                head = next;
                left = head * 2 + 1;
                right = left + 1;
                next = left;
            }
            data[head] = headval;
        }
    }
  • 相关阅读:
    数据库中分组函数rank() ntile() dense_rank() row_number
    seo关键指令
    asp.net中的几个路径问题!
    Jquery 1.6+新属性prop()使用
    SEO
    电脑屏幕显示米黄色!
    C#中对类的扩展
    使用bat文件发布asp.net程序
    SEO优化
    当打开一个网页,浏览器host服务器做了啥?
  • 原文地址:https://www.cnblogs.com/tobemaster/p/12423146.html
Copyright © 2011-2022 走看看