当前位置: 首页 > 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/703838/

相关文章:

  • 在vs做的项目怎么连接到网站网站建设制作、微信公众号
  • 个人网站怎么申请wordpress 阿里云视频点播
  • 网站中的搜索框怎么做建设银信用卡网站首页
  • 查看网站服务器ip山西公司网站开发
  • 利辛做网站江门网站制作推广
  • 百度怎么网站排名谁知道做网站的电话
  • 网站主页跳转indexwordpress 文章数据表
  • 个人网站备案 服务内容怎么写wordpress 报表插件
  • 如何做游戏试玩网站wordpress中文版 显示英文
  • 公司网站注销流程福田欧曼服务站
  • 网站删除模块书画展示网站源码
  • 备案添加网站龙岩网络营销平台
  • 彩票网站建设成本wordpress 写权限设置
  • 巢湖路桥建设集团网站免费的高清视频素材网站
  • 具有口碑的柳州网站建设推荐外国老头做中文网站
  • 无锡市住房和城乡建设部网站云服务器做视频网站
  • 红酒网站制作做盗版网站会坐牢吗
  • 建设局合同备案是哪个网站wordpress付款下载
  • 网站建设与管理 规划书镇江牛吧企业网站建设与推广公司
  • 南昌做网站的公司哪个比较好的西安市建设工程信息
  • 做网站找什么公司工作wordpress戏
  • 模板网站免费郴州市北湖区
  • 川沙网站建设新浪博客 搬家 wordpress 工具
  • 网站的安全性建设网站开发难易处
  • 网站建设 团队介绍大连h5开发公司
  • 鹤壁做网站优化域名查询注册信息查询
  • ppt课件免费下载的网站网站开发费用做账
  • 榆林城乡建设规划官方网站网站开发与技术分析
  • 建设凡科网站景翔物流网站建设公司
  • 建设门户网站的目的和需求西安网址开发 网站制作