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

《零基础Go语言算法实战》【题目 4-2】使用 Go 语言实现一个模拟栈数据结构操作的类 FrequencyStack

《零基础Go语言算法实战》

【题目 4-2】使用 Go 语言实现一个模拟栈数据结构操作的类 FrequencyStack

FrequencyStack 有两个功能:push(int x) 方法将整数 x 压入栈,pop() 方法将栈中出现频次

最高的元素删除并返回;如果出现频次最高的元素存在相同的数量,则最接近栈顶部的元素

将被删除并返回。

【解答】

package main

import "fmt"

type FrequencyStack struct {

 freq map[int]int

 group map[int][]int

 maxfreq int

}

func NewFrequencyStack() FrequencyStack {

 hash := make(map[int]int)

 maxHash := make(map[int][]int)

 return FrequencyStack{freq: hash, group: maxHash}

}

func (fs *FrequencyStack) Push(x int) {

 if _, ok := fs.freq[x]; ok {

 fs.freq[x]++

 } else {

 fs.freq[x] = 1

 }

 f := fs.freq[x]

 if f > fs.maxfreq {

 fs.maxfreq = f

 }

 fs.group[f] = append(fs.group[f], x)

}

func (fs *FrequencyStack) Pop() int {

 tmp := fs.group[fs.maxfreq]

 x := tmp[len(tmp)-1]

 fs.group[fs.maxfreq] = fs.group[fs.maxfreq][:len(fs.group[fs.maxfreq])-1]

 fs.freq[x]--

 if len(fs.group[fs.maxfreq]) == 0 {

 fs.maxfreq--

 }

 return x

}


http://www.kler.cn/a/503742.html

相关文章:

  • Pycharm 使用教程
  • C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
  • 从transformer到informer
  • 二级C语言 2025/1/14
  • 73.矩阵置零 python
  • 《JavaWeb开发-javascript基础》
  • 智能制造智慧工业4.0大数据平台建设综合解决方案(PPT原件)
  • element-ui动态设置tabel的columns时,切换columns数据表格抖动
  • 30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目
  • MATLAB学习笔记-table
  • C++实现设计模式---代理模式 (Proxy)
  • 【Uniapp-Vue3】vite.config中安装插件unplugin-auto-import自动导入vue和uniapp
  • nginx的可视化配置工具nginxWebUI的使用
  • 2.0 机器学习任务攻略
  • JAVA之单例模式
  • 【2024年华为OD机试】 (B卷,100分)- 矩形相交的面积(Java JS PythonC/C++)
  • 【MacOS】恢复打开系统设置的安全性的允许以下来源的应用程序的“任何来源”
  • 掌控 JMeter 测试节奏:Once Only Controller 让关键操作 “一步到位”
  • FPGA EDA软件的位流验证
  • 【深度学习】神经网络灾难性遗忘(Catastrophic Forgetting,CF)问题
  • 深入理解ASP.NET Core 管道的工作原理
  • Next.js如何用静态文件部署
  • 高并发性能优化随笔
  • 大疆上云API基于源码部署
  • 互联网全景消息(11)之Kafka深度剖析(下)
  • 为AI聊天工具添加一个知识系统 之38 一个基于ad hoc 临时传输实现的组织的动态社区平台