首页 » 排名链接 » 程序员面试宝典之在数组中找到2个数的和为指定数的所有整数对(数组个数面试复杂度计数)

程序员面试宝典之在数组中找到2个数的和为指定数的所有整数对(数组个数面试复杂度计数)

萌界大人物 2024-11-02 11:10:05 0

扫一扫用手机浏览

文章目录 [+]

例如数组[2,3,1,4,3,2,5] 给定6 结果为[3,3],[2,4],[1,5]

难度:三星

面试频率:三星

程序员面试宝典之在数组中找到2个数的和为指定数的所有整数对(数组个数面试复杂度计数) 排名链接
(图片来自网络侵删)

思路:

这道题的第一感觉是想到使用2重循环,但是算法题一旦使用多重循环就失去了面试的意义,基本都是面试不通过

这道题的核心是sum.可以从这个变量出发,一般要做到时间复杂度O(n)的话都需要借助一个辅助容器,因此就得到sum+辅助容器map的思路

进一步思考,遍历的时候遇到元素v可以作为key存入map中。
因为下一个遇到了sum-v就是要找到的数,map的value可以用一个计数,如果重复遇到v则将计数++,遇到sum-v,则计数--,为0则删除表示配对成功。

go语言代码如下:

func Solution( sum int ){ var array = [14]int{3,8,7,6,4,2,5,1,2,3,2,2,3,3} map1 := make(map[int]int,0) for _,v := range array{ tmp := sum - v if count,ok := map1[tmp];ok{ count -= 1 if count == 0{ delete(map1,tmp) }else{ map1[tmp] = count } //配对成功 fmt.Printf( "%d,%d\n",tmp,v) }else{ if _,ok := map1[v];ok{ map1[v] += 1 }else{ map1[v] = 1 } } }}

标签:

相关文章

招聘公告(工作经验优先岗位薪资招聘)

招聘:1.人事行政经理任职资格:35岁以下,中共党员;大学本科及以上学历;管理学类、人力资源等相关专业毕业,3年及以上相关工作经历...

排名链接 2025-02-10 阅读1357 评论0