首页 > 编程语言 >代码随想录算法训练营第六天 |242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

代码随想录算法训练营第六天 |242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

时间:2024-01-30 11:47:50浏览次数:42  
标签:202 return 哈希 nums int 示例 随想录 数组 两数

1. 两数之和

  已解答 简单  

相关标签

相关企业  

提示

 

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

 

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

2 <= nums.length <= 104

 

这个数量级不用能o(n2), 用哈希记录填充值map, 遍历数量时先判断是属于填充值,是则返回结果,不是则自己与自己的填充值

 

func twoSum(nums []int, target int) []int { sumHash := make(map[int]int) for i := 0; i < len(nums); i++ { if j, ok := sumHash[nums[i]]; ok { return []int{j, i} } sumHash[target-nums[i]] = i } return []int{} }

 


 

202. 快乐数

  已解答 简单  

相关标签

相关企业  

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

 

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

 

提示:

  • 1 <= n <= 231 - 1

 

 


func isHappy(n int) bool { var getNextHappy func(n int) int getNextHappy = func(n int) int { var res int for n != 0 { var mod int n, mod = n/10, n%10 res += mod * mod } return res } notHappyHash := make(map[int]bool) for n != 1 { if _, ok := notHappyHash[n]; ok { return false } //下面这个一开始忘了写了,粗心的bug notHappyHash[n] = true n = getNextHappy(n) } return true }

 

 


 

349. 两个数组的交集

  已解答 简单  

相关标签

相关企业  

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

 

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

 

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

拓展

那有同学可能问了,遇到哈希问题我直接都用set不就得了,用什么数组啊。

直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。

不要小瞧 这个耗时,在数据量大的情况,差距是很明显的

 

数字分散与大数字不适合用数组来做

  func intersection(nums1 []int, nums2 []int) []int { var res []int //将num1的数据添加到hash, 如果int非常大,这里数量大不能用数组,记numHash, //如果是1000范围之内,可以用数组 numHash := make(map[int]bool) for i := 0; i < len(nums1); i++ { numHash[nums1[i]] = true } //再遍历num2,如果在哈希表里有遇到,则将结果到到res, 并将原hash数量清空,让其无法再被匹配 for i := 0; i < len(nums2); i++ { if numHash[nums2[i]] { res = append(res, nums2[i]) numHash[nums2[i]] = false } } return res }

 

242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

 

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

 

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

 

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

 


一开始直接用hash 方便, 遇到想到用哈希的,想用数组是否能实现 ,优化下
一开始直接用hash 方便, 遇到想到用哈希的,想用数组是否能实现 ,优化下
func isAnagram(s string, t string) bool {
    if len(s) != len(t) {
        return false
    }
    // wordHash := make(map[byte]int)
    // 一开始直接用hash, 这里遇到想到用哈希的,想用数组是否能实现 ,优化下
    var wordHash [26]int
    //step1 往哈希里塞数据
    for i := 0; i < len(s); i++ {
        wordHash[s[i]-'a']++
    }
    //step2 从哈希中移除数据
    for i := 0; i < len(t); i++ {
        if wordHash[t[i]-'a'] == 0 {
            return false
        }
        wordHash[t[i]-'a']--
    }
    return true
}

标签:202,return,哈希,nums,int,示例,随想录,数组,两数
From: https://www.cnblogs.com/suxinmian/p/17995742

相关文章

  • THUWC2024 游记
    前言S爆炸,去不了WC,呜呜呜。好在混给了个THUWC的名额,那还是去玩玩吧。day0t营小分队:我,@柳易辰,@tianhangj坑老师重回战场!其他高二的神仙都有约了。10点的飞机,川航。想买机上wifi,家长不让/fn/fn/fn飞机餐差评。下飞机打车直奔霸树。一进去就看见了zxx!但是我社恐......
  • 【2024-01-29】亲自操心
    20:00汝不如人,由恭敬而求教,不可掩饰护短;人不如汝,则谦和而逊让,不可鄙薄逞长。                                                 ——梁章钜昨晚哄睡二宝时,别扭闹得跟以......
  • 2023年度十佳课题公布:华为云GaussDB获权威认可
    近日,北京金融科技产业联盟正式公布2023年度优秀课题评选结果。工商银行和华为云牵头,并联合7家金融机构共同编制的《金融行业开放平台数据库转型白皮书》(下文简称:白皮书)荣获2023年度十佳课题。该白皮书通过调研金融行业开放平台数据库技术应用现状、分析金融行业数据库架构转型......
  • 算法模板 v1.5.1.20240130
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • 【2024潇湘夜雨】WIN11_Pro_23H2.22631.3085软件选装纯净版1.29
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.22631.3085。2.增加部分优化方案,手工精简部分较多。3.OS版本号为22631.3085。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.16.0.0》网卡版、......
  • 【2024.1.29补题记录】abc335-abc337
    开篇碎碎念总是以开篇碎碎念开写,不加这个有点不太舒服qwq,又是一个周一,开始酣畅淋漓的学习(摸鱼)把之前欠债补一补然后看一下概率abc335总览是23号vp的,出了ABD三题,CWA了一发但是没de出来(没找到错误样例)赛后补了C和EC.LoongTracking很简单真的很简单!!!发现数据如果每次移动更新......
  • PyCharm 2023: 让代码飞翔 mac/win版
    JetBrainsPyCharm2023是一款强大的Python集成开发环境,旨在提高开发人员的生产力。这个版本带来了许多令人兴奋的新功能和改进,以帮助您更快、更有效地编写代码。→→↓↓载Pycharm2023mac/win 首先,PyCharm2023提供了对最新Python版本的全面支持,包括Python3.10。......
  • GoLand 2023:专注性能,提升Go开发者的工作效率 mac/win版
    JetBrainsGoLand2023是一款专为Go语言开发者设计的集成开发环境(IDE)。它提供了全面的工具和服务,旨在提高Go语言开发的效率和生产力。→→↓↓载GoLand2023mac/win版 GoLand2023具有许多先进的特性,其中最突出的特点是其对Go语言的深度支持。它提供了智能代码编辑器,能够......
  • 2024 USACO 题解
    BronzeSilverT1Question给你长度为\(n\)的序列\(c\),$0\lec_i\leC$。若当前位置为\(0\)则表示这个数未知,要求你填数使得序列字典序最小,并满足给出的\(q\)条限制\((a_j,h_j)\),使得\(C_{h_j}\)是第一个严格大于\(C_1\cdotsC_{a_j}\)的数。Solution我的方法叫......
  • PKUWC 2024 游记
    Day998244352吃完早饭打了几个串串板子就去机场了。机场的午饭价格比较震撼啊,一碗盖饭40多……在B20旁边的B19办了值机,拍了张兽图(过安检的时候把包落在安检口了,谔谔,还好没带电脑(飞机上尝试解象棋残局发现并不是很会,于是开始24点,jjdw说他会四个零算24点($(0!+0!+0......