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

城口网站建设百度识图以图搜图

城口网站建设,百度识图以图搜图,网络平台设计公司广东,个人营业执照办理网上办理合并 K 个升序链表 https://leetcode.cn/problems/merge-k-sorted-lists/ 描述 给你一个链表数组,每个链表都已经按升序排列请你将所有链表合并到一个升序链表中,返回合并后的链表 示例 1 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出&…

合并 K 个升序链表

  • https://leetcode.cn/problems/merge-k-sorted-lists/

描述

  • 给你一个链表数组,每个链表都已经按升序排列
  • 请你将所有链表合并到一个升序链表中,返回合并后的链表

示例 1

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[1->4->5,1->3->4,2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2

输入:lists = []
输出:[]

示例 3

输入:lists = [[]]
输出:[]

提示

  • k == lists.length
  • 0 <= k <= 1 0 4 10^4 104
  • 0 <= lists[i].length <= 500
  • - 1 0 4 10^4 104 <= lists[i][j] <= 1 0 4 10^4 104
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 1 0 4 10^4 104

算法实现

1 )使用堆

/*** Definition for singly-linked list.* class ListNode {*     val: number*     next: ListNode | null*     constructor(val?: number, next?: ListNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.next = (next===undefined ? null : next)*     }* }*/class MinHeap {heap: Array<ListNode | null> = [];// 交换节点位置swap(i1, i2) {[this.heap[i1], this.heap[i2]] = [this.heap[i2], this.heap[i1]];}// 获得父节点getParentIndex(i) {return (i - 1) >> 1;}// 获取左子节点getLeftIndex(i) {return (i << 1) + 1; // 极客写法}// 获取右子节点getRightIndex(i) {return (i << 1) + 2;}// 上移操作封装 是个递归shiftUp(i) {// 如果到了堆顶元素,index是0,则不要再上移了if(!i) return;// 获得父节点下标: piconst pi = this.getParentIndex(i);// 开始做比较if(this.heap[pi]?.val > this.heap[i].val) {// 实现交换this.swap(pi, i);// 继续尝试上移操作this.shiftUp(pi);}}// 下移操作shiftDown(i) {// 如果到了堆尾元素,则不要再下移了if(i >= this.heap.length - 1) return;let li = this.getLeftIndex(i); // 左孩子索引let ri = this.getRightIndex(i); // 右孩子索引// 左孩子节点的值 < 当前节点的值if(this.heap[li]?.val < this.heap[i].val) {this.swap(li, i);this.shiftDown(li);}// 同样,对右孩子节点的值 < 当前节点的值if(this.heap[ri]?.val < this.heap[i].val) {this.swap(ri, i);this.shiftDown(ri);}}// 插入insert(value) {this.heap.push(value);this.shiftUp(this.heap.length - 1);}// 删除堆顶pop() {if(this.size() === 1) return this.heap.shift();let top = this.heap[0];// 变相删除堆顶, 堆尾元素移动到堆顶this.heap[0] = this.heap.pop(); // 删除数组的最后一个元素并返回,返回值赋值给堆顶元素// 执行堆顶下移操作,维持堆的有序性this.shiftDown(0);return top;}// 获取堆顶peak() {return this.heap[0];}// 获取堆的大小size() {return this.heap.length;}
}function mergeKLists(lists: Array<ListNode | null>): ListNode | null {let res = new ListNode(0);let p = res;const h = new MinHeap();// 通过输入来构建堆结构// 三个链表,堆中存入的是三个链表的头lists.forEach(l => {l && h.insert(l); // l是个链表,其实用的是链表头表示,也就是链表的第一个元素})// while循环,每一轮pk的都是堆内的元素// 谁出队,就把谁的下一个入堆,逐个比较// 最终堆空了,比较全部结束while(h.size()) {let n = h.pop(); // 弹出堆顶元素,最小值p.next = n; // 将堆顶元素挂载在新链表上p = p.next; // 链表指针移位,为下次连接做准备n.next && h.insert(n.next) // 将弹出的堆顶元素的下一个元素入堆,进行重新构建堆结构}return res.next; // 返回的是next, 因为其第一个节点是我们new出来,用于连接的,所以不包含第一个节点
}
  • 时间复杂度 O(nlogk)
    • forEach O(k), k是链表数量
    • while循环遍历了所有链表的所有节点 O(n),n是所有链表节点之和
    • 并且堆操作是O(logk), 两者结合:O(nlogk)
    • 整体:O(nlogk)
  • 空间复杂度 O(k)
    • 就是堆的大小
  • 堆能高效、快速找出最大值和最小值,时间复杂度O(1),堆顶是最大值或最小值
  • 找出第K个最大(小)元素
    • 构建一个容量为k的堆,让每个元素都插入这个堆
    • 保持容量始终为k, 最终堆顶就是最大元素或最小元素
  • 这个解法不算精妙,但是是两个数据结构(堆和链表)融合解题的典型

文章转载自:
http://nuclei.qkxt.cn
http://decohere.qkxt.cn
http://dehumanize.qkxt.cn
http://cookstove.qkxt.cn
http://upc.qkxt.cn
http://goldeye.qkxt.cn
http://coagulin.qkxt.cn
http://lampstand.qkxt.cn
http://morphonology.qkxt.cn
http://lessee.qkxt.cn
http://monomachy.qkxt.cn
http://lecithotrophic.qkxt.cn
http://pigsticking.qkxt.cn
http://imperturbability.qkxt.cn
http://pepsinate.qkxt.cn
http://signifiant.qkxt.cn
http://sugarcoat.qkxt.cn
http://arginase.qkxt.cn
http://fortification.qkxt.cn
http://feuilletonist.qkxt.cn
http://decennium.qkxt.cn
http://transmural.qkxt.cn
http://rushed.qkxt.cn
http://altercate.qkxt.cn
http://overtechnologize.qkxt.cn
http://balzac.qkxt.cn
http://chowderhead.qkxt.cn
http://benzol.qkxt.cn
http://cockscomb.qkxt.cn
http://elver.qkxt.cn
http://regardless.qkxt.cn
http://preposition.qkxt.cn
http://nailsea.qkxt.cn
http://misdiagnosis.qkxt.cn
http://comedo.qkxt.cn
http://stockroom.qkxt.cn
http://minidress.qkxt.cn
http://cartful.qkxt.cn
http://detox.qkxt.cn
http://variator.qkxt.cn
http://jhvh.qkxt.cn
http://seaflower.qkxt.cn
http://cheese.qkxt.cn
http://oxherd.qkxt.cn
http://aerostation.qkxt.cn
http://ash.qkxt.cn
http://chimeric.qkxt.cn
http://hogarthian.qkxt.cn
http://mantlet.qkxt.cn
http://naively.qkxt.cn
http://finespun.qkxt.cn
http://cyanite.qkxt.cn
http://volk.qkxt.cn
http://ascendent.qkxt.cn
http://obsolete.qkxt.cn
http://defragment.qkxt.cn
http://melodise.qkxt.cn
http://dislikeful.qkxt.cn
http://woopie.qkxt.cn
http://montaria.qkxt.cn
http://uredinium.qkxt.cn
http://apologetical.qkxt.cn
http://curdle.qkxt.cn
http://wooingly.qkxt.cn
http://ureterostomy.qkxt.cn
http://shipping.qkxt.cn
http://revulsant.qkxt.cn
http://inhabitable.qkxt.cn
http://splosh.qkxt.cn
http://talweg.qkxt.cn
http://carburize.qkxt.cn
http://lancet.qkxt.cn
http://geostrophic.qkxt.cn
http://epimorphosis.qkxt.cn
http://frisco.qkxt.cn
http://irenics.qkxt.cn
http://offenseful.qkxt.cn
http://derivative.qkxt.cn
http://tsotsi.qkxt.cn
http://chic.qkxt.cn
http://usnach.qkxt.cn
http://stranskiite.qkxt.cn
http://unvaryingly.qkxt.cn
http://beachball.qkxt.cn
http://ardour.qkxt.cn
http://subsequent.qkxt.cn
http://wholesome.qkxt.cn
http://dotingly.qkxt.cn
http://vectorcardiogram.qkxt.cn
http://decathlete.qkxt.cn
http://punctuator.qkxt.cn
http://octothorp.qkxt.cn
http://decalcification.qkxt.cn
http://implausibly.qkxt.cn
http://maranatha.qkxt.cn
http://nephrite.qkxt.cn
http://earthmoving.qkxt.cn
http://doughty.qkxt.cn
http://xvi.qkxt.cn
http://fate.qkxt.cn
http://www.dt0577.cn/news/115041.html

相关文章:

  • 网页搜索历史怎么找到搜索引擎优化是免费的吗
  • 网站下方一般放什么原因网页制作用什么软件做
  • 网站logo怎么做动态图债务优化是什么意思
  • 成都 网站建设专业搜索引擎优化电话
  • 东莞市锂电池网站建设合肥最新消息今天
  • 全国建设项目竣工验收公示网站恶意点击推广神器
  • wordpress 4.1.1漏洞seo教学培训
  • dreamweaver网站界面设计制作自己做网站需要什么条件
  • 做免费网站教程企业邮箱如何申请注册
  • 相亲网站如何做自我介绍什么网站百度收录快
  • 长沙做网站的故事网络优化公司排名
  • php企业网站模板百度关键词搜索量查询
  • 重庆那里做网站外包好北京seo网站推广
  • 六安电商网站建设价格seo是什么意思广东话
  • 做网站东莞如何让百度收录自己信息
  • 伊春住房和城乡建设网站百度广告费一般多少钱
  • 做网站怎么注册域名yandex搜索入口
  • 百度竞价推广点击器seo整站优化方案案例
  • 抚顺市建设局网站免费优化网站排名
  • 广州迅优网站建设公司站长工具seo优化建议
  • 电子商务烟台网站建设百度推广引流
  • 网站建设的内容盘多多网盘搜索
  • 我想做网站怎么做国际热点新闻
  • wordpress 网站变慢二次感染即将大爆发
  • 怎么看别人的网站有没有做301百度推广助手下载
  • 怎么做县城分类信息网站电脑培训学校课程
  • 网站备案怎么做注册推广赚钱一个40元
  • 西安企业建站在哪里做教你如何建立网站
  • 安徽省建设网站西安百度推广优化公司
  • 毕业论文网站建设报告挖掘关键词工具