首页 > 其他分享 >2024-10-23:最高频率的 ID。用go语言,给定两个长度相等的整数数组 nums 和 freq, 其中nums中的每个元素表示一个ID, 而freq中的每个元素表示对应ID在此次操作后出现的次

2024-10-23:最高频率的 ID。用go语言,给定两个长度相等的整数数组 nums 和 freq, 其中nums中的每个元素表示一个ID, 而freq中的每个元素表示对应ID在此次操作后出现的次

时间:2024-10-23 17:50:59浏览次数:3  
标签:nums int hp ans freq ID

2024-10-23:最高频率的 ID。用go语言,给定两个长度相等的整数数组 nums 和 freq,

其中nums中的每个元素表示一个ID,

而freq中的每个元素表示对应ID在此次操作后出现的次数变化。

如果freq[i]为正数,则表示在这次操作中nums[i]的ID会增加freq[i]次;

如果freq[i]为负数,则表示在这次操作中nums[i]的ID会减少-freq[i]次。

输出一个长度为n的数组ans,其中ans[i]表示第i步操作后出现频率最高的ID的数目。

若集合在某次操作后为空,则ans[i]为0。

输入:nums = [2,3,2,1], freq = [3,2,-3,1]。

输出:[3,3,2,2]。

解释:

第 0 步操作后,有 3 个 ID 为 2 的元素,所以 ans[0] = 3 。

第 1 步操作后,有 3 个 ID 为 2 的元素和 2 个 ID 为 3 的元素,所以 ans[1] = 3 。

第 2 步操作后,有 2 个 ID 为 3 的元素,所以 ans[2] = 2 。

第 3 步操作后,有 2 个 ID 为 3 的元素和 1 个 ID 为 1 的元素,所以 ans[3] = 2 。

答案2024-10-23:

chatgpt

题目来自leetcode3092。

大体步骤如下:

1.初始化一个空的 map[int]int,用于记录每个 ID 在每次操作后的出现次数变化。

2.初始化一个空的最大堆 hp,用于存储每个 ID 的出现次数。

3.循环遍历 nums 数组以及对应的 freq 数组,对于每个元素:

  • 将该 ID 出现的次数变化加到 ID 对应的计数器中。
  • 创建一个 pair 结构,记录 ID 和其出现次数。
  • 将该 pair 推入最大堆 hp 中。
  • 检查堆顶元素是否仍然对应堆顶 ID 的实际计数,如果不是,则从堆中移除堆顶,直到堆顶元素的计数与实际计数一致。
  • 将当前步骤中最高频率的 ID 的数目记录在答案数组 ans 中。

4.返回生成的 ans 数组。

总的时间复杂度为 O(n log n),其中 n 是数组的长度,因为在最坏情况下,我们可能需要对堆进行 n 次插入和弹出操作,每次操作的时间复杂度为 log n。

额外空间复杂度为 O(n),主要是用于存储 ans 数组和堆 hp,以及辅助的计数器 cnt

Go完整代码如下:

package main

import (
	"fmt"
	"container/heap"
)

func mostFrequentIDs(nums, freq []int) []int64 {
	ans := make([]int64, len(nums))
	cnt := make(map[int]int)
	h := hp{}
	heap.Init(&h)
	for i, x := range nums {
		cnt[x] += freq[i]
		heap.Push(&h, pair{cnt[x], x})
		for h[0].c != cnt[h[0].x] { // 堆顶保存的数据已经发生变化
			heap.Pop(&h) // 删除
		}
		ans[i] = int64(h[0].c)
	}
	return ans
}

type pair struct{ c, x int }
type hp []pair
func (h hp) Len() int           { return len(h) }
func (h hp) Less(i, j int) bool { return h[i].c > h[j].c } // 最大堆
func (h hp) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
func (h *hp) Push(v any)        { *h = append(*h, v.(pair)) }
func (h *hp) Pop() any          { a := *h; v := a[len(a)-1]; *h = a[:len(a)-1]; return v }


func main() {
	nums := []int{2,3,2,1}
	freq := []int{3,2,-3,1}
	fmt.Println(mostFrequentIDs(nums,freq))
}

2024-10-23:最高频率的 ID。用go语言,给定两个长度相等的整数数组 nums 和 freq, 其中nums中的每个元素表示一个ID, 而freq中的每个元素表示对应ID在此次操作后出现的次_时间复杂度

标签:nums,int,hp,ans,freq,ID
From: https://blog.51cto.com/moonfdd/12340980

相关文章

  • css常用布局之grid布局
    Grid布局是一个二维的布局系统,可以同时处理行和列,使其非常适合复杂的页面布局。以下是Grid的一些关键概念:容器和项:启用Grid布局的容器称为grid容器。容器内的所有子元素自动成为grid项。网格线和单元格:网格线是定义网格大小和位置的线。单元格是两条水平网......
  • 生产环境中raid实际配置
    生产环境中raid实际配置如果对运维课程感兴趣,可以在b站上、csdn或微信视频号上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频项目1.Raid实际配置:(DELLR710)启动服务器——根据提示按ctrl+R(当dell界面过去时同时按crtl+R)进入raid配置界面,如下图:根......
  • 使用livox mid 70提取特征点过程
    参考链接使用rviz显示bag数据LOAM-Preprocessingloam_livox实现第一版读了一下驱动程序说明书创建了ros环境,创建了demo功能包,创建了类,订阅话题"/livox/lidar"激光雷达数据,不处理直接发布,发布话题"/full"在rviz中查看。说明书首先,览沃ROS驱动程序可以看到广播码说明......
  • Cinemachine系列——Cinemachine Collider
    CinemachineCollider是Cinemachine虚拟相机的一个扩展,它对虚拟相机的最终位置进行后处理,旨在保持与虚拟相机的“关注目标”(LookAttarget)之间的视线。它通过远离阻碍视线的游戏对象来实现这一点。添加CinemachineCollider扩展到Cinemachine虚拟相机,可以完成以下任务:将相机......
  • 【磐维数据库】Oracle(透明网关)访问磐维数据库(PanWeiDB)
    磐维数据库(PanWeiDB)是由中国移动基于中国本土开源数据库openGauss打造的自研数据库产品,主要面向ICT基础设施。它具有高性能、高可靠性、高安全性和高兼容性的特点,能够支持集中式、分布式、云原生、一体机等多种应用场景。目前,磐维数据库已在中国移动的多个省(区、市)公司及专业公司......
  • IDE和IDEA的定义和区别
    IDE(集成开发环境)定义:IDE是集成开发环境的缩写,是一种用于提供程序开发环境的应用程序。它集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。特点:IDE旨在提高开发人员的生产力,简化开发过程,并......
  • 快手根据ID取商品详情 API 返回值说明
    快手根据ID取商品详情API返回值说明item_get-根据ID取商品详情 ks.item_get公共参数请求地址:名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_sho......
  • FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库LD
    ijkplayer是一款由B站研发的移动端国产播放器,它基于FFmpeg3.4版本,同时兼容Android和iOS两大移动操作系统。ijkplayer的源码托管地址为https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer获得3.24万星标数,以及0.81万个分支数,而这还是ijkplayer停止更新6年之后的数据......
  • [Paper Reading] HOIDiffusion: Generating Realistic 3D Hand-Object Interaction Da
    目录HOIDiffusion:GeneratingRealistic3DHand-ObjectInteractionDataTL;DRMethod阶段一阶段二TrainingCode&&ImplementationExperiment效果可视化总结与发散HOIDiffusion:GeneratingRealistic3DHand-ObjectInteractionDatalink时间:24.03作者与单位:主页:https:......
  • Android之Manifest.xml文件的标签+属性
    Manifest.xml文件结构目录<?xmlversion="1.0"encoding="utf-8"?><manifest><uses-permission/><permission/><permission-tree/><permission-group/><instrumentation/>&......