汪图南
  • RAG

    • RAG
  • 快速入门
  • 高级技巧
前端面试之道
  • 打包工具

    • Webpack
    • Rollup
  • TypeScript

    • TypeScript基础
    • TypeScript类型挑战
  • CSS预编译器

    • SASS
  • 自动化测试

    • Vue应用测试
  • Vue2.0源码分析
  • Vue3.0源码分析
  • 数据结构和算法(基础)
  • LeetCode(刷题)
  • JavaScript书籍

    • 你不知道的JavaScript(上)
    • 你不知道的JavaScript(中下)
    • JavaScript数据结构和算法
    • JavaScript设计模式与开发实践
    • 深入理解ES6
  • Git书籍

    • 精通Git
Github
  • RAG

    • RAG
  • 快速入门
  • 高级技巧
前端面试之道
  • 打包工具

    • Webpack
    • Rollup
  • TypeScript

    • TypeScript基础
    • TypeScript类型挑战
  • CSS预编译器

    • SASS
  • 自动化测试

    • Vue应用测试
  • Vue2.0源码分析
  • Vue3.0源码分析
  • 数据结构和算法(基础)
  • LeetCode(刷题)
  • JavaScript书籍

    • 你不知道的JavaScript(上)
    • 你不知道的JavaScript(中下)
    • JavaScript数据结构和算法
    • JavaScript设计模式与开发实践
    • 深入理解ES6
  • Git书籍

    • 精通Git
Github
  • 介绍

    • 介绍
  • 推荐

    • LeetCode刷题推荐
  • 链表

    • 目录
    • 简单
    • 中等
    • 困难
  • 栈

    • 目录
    • 简单
    • 中等
    • 困难
  • 队列

    • 目录
    • 简单
    • 中等
    • 困难
  • 哈希表

    • 目录
    • 简单
    • 中等
    • 困难
  • 二叉树

    • 目录
    • 简单
    • 中等
    • 困难
  • 堆

    • 目录
    • 简单
    • 中等
    • 困难
  • 图

    • 目录
    • 简单
    • 中等
    • 困难
  • 搜索

    • 目录
    • 简单
    • 中等
    • 困难

中等

215.数组中的第K个最大元素

215.数组中的第K个最大元素

方法一:基于大顶堆排序

class MaxHeap {
  constructor(nums) {
    const size = nums.length;
    this.nums = nums;
    for (let i = Math.floor(size / 2) - 1; i >= 0; i--) {
      this.maxHeapify(i, size);
    }
  }
  swap(i, j) {
    const temp = this.nums[i];
    this.nums[i] = this.nums[j];
    this.nums[j] = temp;
  }
  maxHeapify(i, size) {
    while (true) {
      let l = 2 * i + 1;
      let r = 2 * i + 2;
      let m = i;
      if (l < size && this.nums[l] > this.nums[m]) {
        m = l;
      }
      if (r < size && this.nums[r] > this.nums[m]) {
        m = r;
      }
      if (m === i) {
        break;
      }
      this.swap(m, i)
      i = m;
    }
  }
}

// way1: 基于大顶堆
// n为数组的元素长度
// 时间复杂度:O(nlogn),O(nlogn)
// 空间复杂度:O(logn),递归使用栈空间的开销
var findKthLargest = function (nums, k) {
  let size = nums.length;
  const heap = new MaxHeap(nums);
  for (let i = nums.length - 1; i >= nums.length - k + 1; i--) {
    heap.swap(0, i);
    --size;
    heap.maxHeapify(0, size);
  }
  return nums[0];
};

347.前K个高频元素

347.前K个高频元素

最后更新时间: 2025/5/6 15:36
贡献者: wangtunan
Prev
简单
Next
困难