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

柳州制作网站物联网应用技术就业方向及前景

柳州制作网站,物联网应用技术就业方向及前景,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.yayakq.cn/news/605171/

相关文章:

  • 广州市住宅建设发展有限公司网站论文写作网站5000字怎么写
  • 图片下载网站哪个好做网站设计的都转行干啥了
  • 建设银行大丰支行网站为什么网站需要静态化生成html
  • 网站广告位价格一般多少微信怎么制作自己的小程序
  • xampp wordpress 建站女生做交互设计师好吗
  • 联想网站建设预算报告书wordpress转微信支付
  • 视频网站的服务器多大宁波建设信息网站
  • 专门做评测的网站有哪些棋牌网站开发需要多少钱
  • 培训学校网站建设河北省建设厅官方网站
  • 如何做盗版小说网站公司网站建设需要注意的地方
  • 葫芦岛做网站的公司农村电商平台简介
  • 可以做游戏的网站有哪些内容临桂建设局安全股网站
  • 网站升级改版方案品牌建设有哪些方面
  • 公司网站的seo怎么做策划公司创业计划书
  • 郑州建设网站费用优秀网站建设设计
  • 南京网站设计开发免费下wordpress
  • 网站流程示意郑州做外贸网站
  • 口碑好网站建设网站建设:上海珍岛
  • 可以看帖子的网站邮箱注册申请
  • 网站改版应该怎么做百度收录最好的网站
  • 网站建设带宽多少合适网站建设同行抄袭
  • 网站的数据库在哪里丰台网站关键词优化
  • 贵州省建设学校官方网站wordpress 轮播图插件下载
  • 怎么看一个网站做的好不好沈阳的网站建设
  • 瑞安自适应网站建设制作网页需要什么技术
  • 网站分辨率做多大宝安区城市建设局网站
  • logo设计免费网址泉州百度网站快速优化
  • 徐州有哪些网站制作公司网站策划表
  • 泉州那家做网站公司好院感质控中心网站建设 申请
  • 扒wordpress站广州seo工资