Golang | Leetcode Golang题解之第题432题全O(1)的数据结构

embedded/2024/9/24 6:31:07/

题目:

题解

type node struct {keys  map[string]struct{}count int
}type AllOne struct {*list.Listnodes map[string]*list.Element
}func Constructor() AllOne {return AllOne{list.New(), map[string]*list.Element{}}
}func (l *AllOne) Inc(key string) {if cur := l.nodes[key]; cur != nil {curNode := cur.Value.(node)if nxt := cur.Next(); nxt == nil || nxt.Value.(node).count > curNode.count+1 {l.nodes[key] = l.InsertAfter(node{map[string]struct{}{key: {}}, curNode.count + 1}, cur)} else {nxt.Value.(node).keys[key] = struct{}{}l.nodes[key] = nxt}delete(curNode.keys, key)if len(curNode.keys) == 0 {l.Remove(cur)}} else { // key 不在链表中if l.Front() == nil || l.Front().Value.(node).count > 1 {l.nodes[key] = l.PushFront(node{map[string]struct{}{key: {}}, 1})} else {l.Front().Value.(node).keys[key] = struct{}{}l.nodes[key] = l.Front()}}
}func (l *AllOne) Dec(key string) {cur := l.nodes[key]curNode := cur.Value.(node)if curNode.count > 1 {if pre := cur.Prev(); pre == nil || pre.Value.(node).count < curNode.count-1 {l.nodes[key] = l.InsertBefore(node{map[string]struct{}{key: {}}, curNode.count - 1}, cur)} else {pre.Value.(node).keys[key] = struct{}{}l.nodes[key] = pre}} else { // key 仅出现一次,将其移出 nodesdelete(l.nodes, key)}delete(curNode.keys, key)if len(curNode.keys) == 0 {l.Remove(cur)}
}func (l *AllOne) GetMaxKey() string {if b := l.Back(); b != nil {for key := range b.Value.(node).keys {return key}}return ""
}func (l *AllOne) GetMinKey() string {if f := l.Front(); f != nil {for key := range f.Value.(node).keys {return key}}return ""
}

http://www.ppmy.cn/embedded/115954.html

相关文章

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤&#xff1a; (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…

基于单片机巡迹避障智能小车系统

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

dedecms——四种webshell姿势

姿势一&#xff1a;通过文件管理器上传WebShell 步骤一&#xff1a;访问目标靶场其思路为 dedecms 后台可以直接上传任意文件&#xff0c;可以通过文件管理器上传php文件获取webshell 步骤二&#xff1a;登陆到后台点击【核心】--》 【文件式管理器】--》 【文件上传】将准备好…

签署《AI安全国际对话威尼斯共识》 智源持续推动人工智能安全发展

近日&#xff0c;由AI安全国际论坛&#xff08;Safe AI Forum&#xff09;和博古睿研究院&#xff08;Berggruen Institute) 共同举办的第三届国际AI安全对话&#xff08;International Dialogues on AI Safety&#xff09;在威尼斯举办。图灵奖得主Yoshua Bengio、姚期智教授&…

html,js,react三种方法编写helloworld理解virtual dom

学习任何一个新语言&#xff0c;好像都从helloworld开始。&#xff1a;&#xff09;。 html helloworld 静态hello world <!DOCTYPE html> <html> <head><title>Hello World</title> </head> <body><p>Hello World</p&g…

操作系统知识2

1.分页与分段有什么区别&#xff1f; 分页&#xff1a; 内存管理的一种方法&#xff0c;将虚拟地址空间划分为固定大小的页&#xff08;通常是4KB&#xff09;。页表用于映射虚拟页到物理页&#xff0c;简化了内存分配和管理。适合处理大规模程序的内存分配&#xff0c;可以有效…

Apple Intelligence预计会在iOS 18.1和iOS 18.4之间按此顺序推出

本月早些时候 iOS 18 已公开发布&#xff0c;但首批 Apple Intelligence 功能要等到 10 月份 iOS 18.1 发布后才可以使用。Apple Intelligence 功能将继续在 iOS 18.2 及更高版本中推出&#xff0c;预计路线图如下&#xff0c;出自 Apple 网站和传闻。 Apple Intelligence 需要…

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…