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

做品牌折扣微信推广的网站工业app开发平台

做品牌折扣微信推广的网站,工业app开发平台,金融网站开发公司,wordpress音乐插件传送门 牛客面试笔试必刷101题 ----------------合并k个已排序的链表 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的合并链表题目类似,但是由于有K个且时间复杂度要求控制在O(nlogn),这里主要有两种解法:一种是依旧使用归并来…

传送门

牛客面试笔试必刷101题 ----------------合并k个已排序的链表

题目以及解析

题目

在这里插入图片描述

解题代码及解析

解析

这一道题与昨天的合并链表题目类似,但是由于有K个且时间复杂度要求控制在O(nlogn),这里主要有两种解法:一种是依旧使用归并来合并,一种则是利用堆这种数据结构来实现。

代码

方法一:堆(优先队列)

package main
import _"fmt"
import . "nc_tools"
import "container/heap"/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param lists ListNode类一维数组 * @return ListNode类
*/
func mergeKLists( lists []*ListNode ) *ListNode {p:=hp{}for _,head:=range lists{if head!=nil{p=append(p,head)}}heap.Init(&p)//初始化堆curr:=&ListNode{}dump:=currfor len(p)>0{node:=heap.Pop(&p).(*ListNode)if node.Next!=nil{heap.Push(&p,node.Next)}curr.Next=nodecurr=curr.Next}return dump.Next
}//定义小根堆
type hp []*ListNodefunc (p hp) Len() int{return len(p)
}
func (p hp)Less(i,j int) bool{  //通过该函数来确定小根堆还是大根堆return p[i].Val<p[j].Val
}func (p hp)Swap(i,j int){p[i],p[j]=p[j],p[i]
}func (p *hp)Push(value interface{}){*p=append(*p,value.(*ListNode))
}func (p *hp)Pop() any{a:=*pvalue:=a[len(a)-1]*p=a[:len(a)-1]return value
}

方法二:分治

package mainimport (_ "container/list"_ "fmt". "nc_tools"_ "net"
)/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param lists ListNode类一维数组* @return ListNode类*/
func Merge(list1 *ListNode, list2 *ListNode) *ListNode {dump := &ListNode{}current := dumpfor list1 != nil && list2 != nil {if list1.Val < list2.Val {current.Next = list1list1 = list1.Next} else {current.Next = list2list2 = list2.Next}current=current.Next}if list1 != nil {current.Next = list1list1 = list1.Next}if list2 != nil {current.Next = list2list2 = list2.Next}current = current.Nextreturn dump.Next
}func mergeKLists(lists []*ListNode) *ListNode {m := len(lists)if m == 0 {return nil}if m == 1 {return lists[0]}left := mergeKLists(lists[:m/2])right := mergeKLists(lists[m/2:])return Merge(left, right)
}

总结:

这题依旧是一道合并链表题,但是简单的遍历来挨个合并会使时间复杂度上升到O(n^2),所以需要采取一些巧劲来实现,但是玩具的最好的还是使用堆来解题,可以更好了解到堆泛型在Go语言中如何去使用。

http://www.yayakq.cn/news/717090/

相关文章:

  • 杭州在线制作网站需要个网站
  • 海洋cms做电影网站好做吗网站建设有几种方案
  • 电子商务网站的类型页面看不到网站
  • 江苏省做网站湛江赤坎孵化器网站建设招聘
  • 站长之家网站流量查询驻马店网站建设熊掌号
  • 扬中网站优化哪家好网站建设需要学多久知乎
  • 大连专业做网站深圳台历制作
  • 卦神岭做网站网站的三种基本类型
  • 网站后台 网站页面没有显示服务器 打开网站iis7
  • 大型网站制作公司网站开发的任务要求
  • 河南论坛网站建设手机软件下载大全
  • 新网个人网站备案网络营销渠道
  • 模板建站和定制网站的对比东莞网站搭建
  • 网站制作收费做网站一般需要多久
  • 广告灯箱设计制作价格南京市网站seo整站优化
  • 雄安网站建设400多少钱作文素材网站
  • 云尚网络科技有限公司网站建设wordpress 仿站教程
  • 站长工具同大全站外贸网站建设 翻译
  • 龙岩整站优化如何把做的网站与域名连接不上
  • 行业网站建设费用网页与网站设计说明
  • 做电影下载网站需要什么移动终端网站建设
  • 无锡网站改版多少钱wordpress文章总阅读量
  • 北京网站seo优化推广建设银行个人官方网站
  • 哪家可以做网站河南推广网站的公司
  • wordpress 站群会员网站建设好后为什么要维护
  • 嘉兴网站建设策划方案外国食品优秀设计网站
  • 黔东南购物网站开发设计最有设计感的网站
  • 做影集的网站或软件公司logo设计大全 图片欣赏
  • 做网站的一些费用网站制作明细清单
  • 红酒公司网站建设模板6841理论网