【golang 必备算法】哈希表篇
2021/10/24 1:39:30
本文主要是介绍【golang 必备算法】哈希表篇,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
哈希表
242. 有效的字母异位词
func isAnagram(s string, t string) bool { var m [26]int for _,v:=range s{ m[v-'a']++ } for _,k:=range t{ m[k-'a']-- } for _,w:=range m{ if w!=0{ return false } } return true }
349. 两个数组的交集
func intersection(nums1 []int, nums2 []int) []int { var arr []int h:=make(map[int]int,1) for _,k:=range nums1{ h[k]++ } for _,v:=range nums2{ if h[v]>0{ arr=append(arr,v) h[v]=0 } } return arr }
202. 快乐数
用哈希表来检测循环,出现出过的数就直接返回false
func isHappy(n int) bool { h:=make(map[int]int,0) for n!=1{ if h[n]>0{ return false } h[n]++ //要先保存在map中,再更新 n=getsum(n) } return true } func getsum(n int)int{ sum:=0 for n>0{ sum+=(n%10)*(n%10) n=n/10 } return sum }
1. 两数之和
func twoSum(nums []int, target int) []int { h:=make(map[int]int,len(nums)) for k,v:=range nums{ if p,ok:=h[target-v];ok{ return []int{k,p} } h[v]=k } return []int{} }
454. 四数相加 II
func fourSumCount(nums1 []int, nums2 []int, nums3 []int, nums4 []int) int { h:=make(map[int]int) var t int for _,v1:=range nums1{ for _,v2:=range nums2{ h[v1+v2]++ } } for _,v3:=range nums3{ for _,v4:=range nums4{ t+=h[0-v3-v4] } } return t }
383. 赎金信
func canConstruct(ransomNote string, magazine string) bool { var mag [26]int for _,v:=range magazine{ mag[v-'a']++ } for _,k:=range ransomNote{ if mag[k-'a']<=0{ return false }else{ mag[k-'a']-- } } return true }
15. 三数之和
两层循环+双指针
func threeSum(nums []int) [][]int { var res [][]int sort.Ints(nums) for i:=0;i<len(nums)-2;i++{ n1:=nums[i] if nums[i]>0{ break } if i>0&&nums[i]==nums[i-1]{ continue } left:=i+1 right:=len(nums)-1 for right>left{ n2:=nums[left] n3:=nums[right] if n1+n2+n3==0{ res=append(res,[]int{n1,n2,n3}) for right>left&&nums[left]==n2{ left++ } for right>left&&nums[right]==n3{ right-- } }else if n1+n2+n3>0{ right-- }else if n1+n2+n3<0{ left++ } } } return res }
18. 四数之和
每层循环都要去重
func fourSum(nums []int, target int) [][]int { res:=[][]int{} if len(nums)<4{ return res } sort.Ints(nums) for i:=0;i<len(nums)-3;i++{ n1:=nums[i] if i>0&& n1 == nums[i-1] { continue } for j:=i+1;j<len(nums)-2;j++{ n2:=nums[j] if j>i+1&& n2 == nums[j-1] { continue } l:=j+1 r:=len(nums)-1 for l<r{ n3:=nums[l] n4:=nums[r] if n1+n2+n3+n4==target{ res=append(res,[]int{n1,n2,n3,n4}) for l<r&&nums[l+1]==nums[l]{ l++ } for l<r&&nums[r-1]==nums[r]{ r-- } l++ r-- }else if n1+n2+n3+n4>target{ r-- }else{ l++ } } } } return res }
这篇关于【golang 必备算法】哈希表篇的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南