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

server/2025/1/15 18:27:04/

《零基础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.ppmy.cn/server/158622.html

相关文章

鸿蒙面试 2025-01-11

ArkTs 和TS的关系? ArkTS(方舟开发语言)与 TypeScript(TS)存在紧密联系,同时也有显著区别: 联系 语法基础:ArkTS 在语法层面大量借鉴了 TypeScript ,TypeScript 里诸如…

Spring Boot中的扫描注解如何使用

在 Spring Boot 中,扫描注解是指通过注解来告诉 Spring 框架应该扫描哪些包、哪些类或哪些特定的组件,并将其作为 Spring 容器中的 bean 进行管理。Spring Boot 主要通过以下几种注解来实现自动扫描: ComponentScanSpringBootApplicationCom…

springboot 加载本地jar到maven

在Spring Boot项目中,如果你想要加载一个本地的jar文件到Maven本地仓库,你可以使用Maven的install-file目标来实现。以下是一个简单的例子: 打开命令行工具(例如:终端或者命令提示符)。 执行以下Maven命令…

LLM进化下的Agent演变及软件重构下的一点思考

最近在与peer团队协同时遇到一个case,客户是某科研院所,希望通过llm,agent等技术搭建科研实验操作助手,以实现一定自主化的实验前领域知识学习与洞察、实验方案设计、实验过程执行与检测、实验结果统计与反馈等… 这让我回忆起去…

MQTT(Message Queuing Telemetry Transport)协议

文章目录 一、MQTT 的原理1. 通信模型2. 核心概念3. 工作流程 二、MQTT 的优势1. 轻量级2. 异步通信3. 可靠性4. 实时性5. 支持断线重连6. 跨平台支持7. 安全性 三、MQTT 的典型应用场景四、与其他协议的对比 MQTT(Message Queuing Telemetry Transport)…

Vue.js组件开发-使用地图绘制轨迹

在Vue.js中开发一个组件来展示地图并绘制轨迹,可以使用诸如Leaflet.js、Mapbox GL JS或百度地图等地图库。这些库提供了丰富的API来创建和定制地图,以及绘制路径、标记和其他地图元素。 示例: 1. 安装Leaflet.js 首先,需要安装…

LabVIEW智能水肥一体灌溉控制系统

本文详细介绍了一种基于LabVIEW的智能水肥一体灌溉控制系统的设计与实现。该系统采用模糊控制策略,能够自动调节土壤湿度和肥液浓度,满足不同作物在不同生长阶段的需求,有效提高水肥利用效率,对现代精准农业具有重要的实践和推广价…

用gpg和sha256验证ubuntu.iso

链接 https://ubuntu.com/tutorials/how-to-verify-ubuntuhttps://releases.ubuntu.com/jammy/ 本文是2的简明版 sha256sum介绍 sha256sum -c SHA256SUMS 2>&1这段脚本的作用是验证文件的 SHA-256 校验和。具体来说,命令的各个部分含义如下: …