首页 > 其他分享 >萌新也能看懂的 Golang 题解(三)

萌新也能看懂的 Golang 题解(三)

时间:2023-03-04 15:00:27浏览次数:53  
标签:map 萌新 题解 复杂度 通配符 Golang TopK 数组 排序

第三批

1822. 电话拦截(模拟、排序)

难度:中等;主观评价:简单。

sort.Slice() 应用题,重点在于通配符的判断和如何设计数据结构保证最后能按呼叫顺序返回通话记录。

对于没有通配符的号码,可以使用 map 保存,使用时判断 map 中是否包含对应的 key;对于有通配符的号码可以去掉结尾的 * 号后使用数组保存,使用时遍历这个数组并用 strings.HasPrefix() 判断当前的电话号码是否满足某个带有通配符的匹配规则。

使用 map 保存通话记录可以很方便地编辑某个号码的通话记录信息。由于 Go 的 map 是无序的,所以在设计保存结构时,需要加上序号,并且在每次向这个 map 添加新元素(即新增通话记录)时都更新这个序号,最后使用 sort.Slice() 按照序号排序并生成所需格式即可。

时间复杂度:O(n * m),其中 m 为输入的白名单中带有通配符的电话号码的个数。

空间复杂度:O(n),record 哈希表占用的空间与输入中不同电话号码的个数成正比。

1825. 按身高和体重排队(排序)

难度:简单;主观评价:简单。

sort.Slice() 应用题。

为了便于理解和编码,这里将每一位运动员的数据都保存在一个结构体中,然后对这个结构体数组进行排序,最后把所有运动员的编号按顺序收集到一个切片中返回。

当然这道题如果想优化到极致的话可以将空间复杂度优化到 O(1),具体方法是直接生成答案数组并参考要求对答案数组排序。

时间复杂度:O(nlogn),为排序算法的时间复杂度。

空间复杂度:O(n),主要来自 students 数组。

1826. 整数对最小和(TopK)

难度:简单;主观评价:中等。

先吐槽一下这令人迷惑的难度评级,TopK 竟然评了个简单?且不说这题在算法难度上完爆被评为中等的 1822,LeetCode 上最简单的 TopK(LeetCode 215.Kth Largest Element in an Array)都是中等。。。这要是哪位不会 TopK 的倒霉蛋在入门级科目一抽到这种题,估计他的内心是崩溃的。

言归正传,既然是 TopK 问题且寻找的是最小的 k 个和,那么我们可以建立一个大小为 k 的大顶堆,并且遍历两个数组枚举每一对整数和。当堆没满时,可以将和直接加入堆;当堆满后,如果和小于堆顶,就弹出堆顶并且把和加入堆;如果和大于堆顶,则直接跳过,并且由于两个数组都是已经排好序的,所以此时可以直接跳过剩余的数。最后把堆中元素加起来即得到答案。

这题对于 Go 语言的主要难点是如何实现一个堆(实现 heap.Interface),以及自行实现 peek() 方法:从堆中弹出一个元素再将它插入回去。

时间复杂度:O((n*m)logk),其中 n 为 array1 的长度,m 为 array2 的长度,logk 为将堆调整为大顶堆的时间复杂度。

空间复杂度:O(k),堆占用的空间与 k 成正比。

 

 

标签:map,萌新,题解,复杂度,通配符,Golang,TopK,数组,排序
From: https://www.cnblogs.com/gongxianjin/p/17178309.html

相关文章

  • golang的指针变量,智商声明没有赋值,不能直接 *p=123之类的
    packagemainimport"fmt"funcmain(){ //申明指针的时候,如果没有指向某个变量,默认值为nil //不能直接进行操作,包括读写 //而用new返回的是有默认值的指针,为数据......
  • 指针和数组笔试题解析
    在大多数情况下,数组名就是数组首元素的地址,但是有两种特殊情况:一、sizeof(数组名):当数组名单独放在sizeof内部,指的是整个数组二、&数组名:取的是整个数组的地址,但是结果和首......
  • CF1764G1 题解
    题意传送门交互库有一个\([1,n]\)的排列\(p\),你可以询问\(l,r,k\),交互库会返回\(\lfloor\dfrac{p_l}{k}\rfloor,\lfloor\dfrac{p_{l+1}}{k}\rfloor,\dots,\lfloor\d......
  • lg7335 [JRKSJ R1] 异或 题解
    本题的标签中含有trie,但是这道题可以不用trie做。考虑列出本题的dp方程:设\(f_{k,i}\)表示前\(i\)个数选了\(k\)段的答案,\(s_i\)为数组的前缀异或和当不选择第\(i\)位,使用......
  • 【题解】P6271 [湖北省队互测2014]一个人的数论
    很久之前存的古代经典题,思路是cyj的。感谢那时候先辈们的分享精神,这就是十年前的OI圈子吗。思路莫比乌斯反演。首先注意到一个自然数幂次和,令\(F(n)=\sum\limit......
  • protobuf golang&&python序列化反序列化测试
    1.概要最近考虑采用protobuf来实现kafka消息传递,所以先测试一下golang和python之前序列化互通问题。由于go和python对于二进制的表示在ide层面是无法统一的,直接把python......
  • 前端问题解决步骤
    总结,有错误看错误,没明显错误看逻辑。F12查看(看连接是否有错误。)在看NetWork查看选项Fetch/XHR(看具体接口对应相关数据是否正确)找后端代码和前端代码的逻辑问题。(swagg......
  • pdf.js 预览时红章、电子签和部分文字无法显示问题解决方案
    pdf红章无法预览的问题修复方案:node_modules/pdfjs-dist/es5/build/pdf.worker.js注释一行代码:this.setFlags(_util.AnnotationFlag.HIDDEN)pdf电子签、部分文字不......
  • lg8935 [JRKSJ R7] 茎 题解
    由于标签内包含背包和树形dp,所以考虑用背包dp和树形dp求解。考虑每次合并2个连通块(一个包含根节点),设\(f_{i,j}\)表示\(i\)子树内,操作\(j\)次的方案数(未合并连通块),设\(f_{i......
  • [已解决]Android studio连接远程MySQL问题解决
    我电脑安装的是8.0的MySQL,导入使用的jar包是mysql-connector-java-5.0.71、首先先按照大佬的链接配置好一些东西,注意!已经安装8.0版本MySQL的保持原样就行,不用重新安装5.0......