当前位置: 首页 > news >正文

佛山网站建设计济南seo网站优化公司

佛山网站建设计,济南seo网站优化公司,海南省交通建设局网站首页,wordpress校园数组中的第K个最大元素 https://leetcode.cn/problems/kth-largest-element-in-an-array/ 描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。…

数组中的第K个最大元素

  • https://leetcode.cn/problems/kth-largest-element-in-an-array/

描述

  • 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
  • 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
  • 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1

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

示例 2

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

提示

  • 1 <= k <= nums.length <= 1 0 5 10^5 105
  • - 1 0 4 10^4 104 <= nums[i] <= 1 0 4 10^4 104

算法实现

1 )基于js中原生sort api

const findKthLargest = function(nums, k) {return nums.sort((a,b) => b-a)[k - 1]
};
  • 这个浏览器默认提供的sort()方法,一般时间复杂度是 O(nlogn)

2 )基于堆的数据结构和堆排序的方法

// 建立最小堆类
class MinHeap {heap: number[] = [];// 交换节点位置swap(i, j) {[this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]];}// 获得父节点getParentIndex(i) {return (i - 1) >> 1;}// 获取左子节点getLeftIndex(i) {return (i << 1) + 1; // 极客写法}// 获取右子节点getRightIndex(i) {return (i << 1) + 2;}// 向上移动shiftUp(index) {// 如果到了堆顶元素,index是0,则不要再上移了if(!index) return;const parentIndex = this.getParentIndex(index)if(this.heap[parentIndex] > this.heap[index]) {this.swap(parentIndex, index)this.shiftUp(parentIndex)}}// 下移shiftDown(index) {// 边界1:如果到了堆尾元素,则不要再下移了if(index >= this.heap.length - 1) return;const size = this.size();const leftIndex = this.getLeftIndex(index);const rightIndex = this.getRightIndex(index);if (leftIndex < size && this.heap[leftIndex] < this.heap[index]) {this.swap(leftIndex, index);this.shiftDown(leftIndex);}if (rightIndex < size && this.heap[rightIndex] < this.heap[index]) {this.swap(rightIndex, index);this.shiftDown(rightIndex);}}// 插入insert(value) {this.heap.push(value);this.shiftUp(this.heap.length - 1);}// 删除堆顶pop() {// pop()方法删除数组最后一个元素并返回,赋值给堆顶this.heap[0] = this.heap.pop();// 对堆顶重新排序this.shiftDown(0);}// 获取堆顶peak() {return this.heap[0];}// 获取堆的大小size() {return this.heap.length;}
}// 实现
const findKthLargest = (nums, k) => {const h = new MinHeap();nums.forEach(n => {// 将数组元素依次插入堆中h.insert(n);// 如果堆满,则执行优胜劣汰(h.size() > k) && h.pop();})// 返回堆顶,此时就是第k大的元素return h.peak();
};
  • 关键在于这个堆的数据结构提供的 insert 方法 与 pop 方法
  • 时间复杂度:O(nlogk)
    • 一个n循环,里面还嵌套一个heap的上移递归操作logk
    • 总体:n*logk
  • 空间复杂度: O(k) 或 O(logn)
    • 堆的大小,数组的大小, k是输入的堆大小
  • 注意
    • 本题使用的是一个堆排序的算法,O(nlogn)
    • 但是还有其他排序也可以达到这个效率
    • 但是这个不符合题目的要求:时间复杂度为 O(n) 的算法

3 )基于快速排序

TODO


http://www.dt0577.cn/news/45918.html

相关文章:

  • 网络服务费百度搜索优化软件
  • 网站建设的公司有哪些方面上海百度推广电话
  • 高密做网站哪家好代理论坛推广网站
  • 惠州网站设计定制软件开发工资一般多少
  • 物流企业网站建设步骤seo培训机构
  • 如何做简单视频网站国内好的seo网站
  • 网站出现风险如何处理国内免费b2b网站大全
  • b2c网站前台系统主要包括哪几个部分云南优化公司
  • 合肥做百度网站seo销售好做吗
  • 芜湖哪些公司做公司网站百度官网电话
  • 专业做网站有哪些陕西今日头条新闻
  • 大淘客网站怎么做搜索风云榜百度
  • 安庆做网站电话站长工具百度
  • 网站 中文版与英文版的后台有什么不同googleplay
  • 百度网站考核期营销软文网站
  • 汽车用品网站建设策划书新闻联播俄罗斯与乌克兰
  • 网站开发服务合同印花税关键词优化价格表
  • 怎样才能把网站做好免费网站申请注册
  • 武汉如何做网站什么软件推广效果好
  • 刘涛给孩子网站做的广告而的跟地seo排名点击软件
  • 济南网站建设优化灵宝seo公司
  • 网站开发考研是什么专业把百度网址大全设为首页
  • 网站请人做要多少钱sem与seo
  • 网站秒杀小程序怎么做不付费免费网站
  • 网站建设高端佛山网站建设维护
  • 怎么做日本钓鱼网站aso关键词覆盖优化
  • 新公司怎样做网站在四川眉山seo优缺点
  • 做国内打不开的网站网站优化网络推广seo
  • 互联网公司十大排名上海搜索优化推广
  • 大庆市住房与城乡建设局网站网络营销和推广做什么