1. 两数之和
题目简述
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个横竖,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
思路
1. 遍历列表,暴力枚举;从列表的第1个元素开始遍历,先确定第1个元素,然后再到后面的元素中找是否存在target-nums[i],如果存在,就返回下标,不存在,i加1继续找它后面是否存在target-nums[i]。直到遍历完为止。
代码如下
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: # 遍历列表 for i in range(len(nums)): # 计算需要找到的下一个目标数字 res = target-nums[i] # 遍历剩下的元素,查找是否存在该数字 if res in nums[i+1:]: # 若存在,返回答案。这里由于是两数之和,可采用.index()方法 # 获得目标元素在nums[i+1:]这个子数组中的索引后,还需加上i+1才是该元素在nums中的索引
return [i, nums[i+1:].index(res)+i+1]
2. 利用哈希表;
1) 遍历nums中的x,看看哈希表中是否有target-x,没有的话,就把x存入哈希表
2) 有的话,就输出target-x和x在哈希表中的值
代码如下
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hashtable = dict() for i, num in enumerate(nums): if target - num in hashtable: return [hashtable[target - num], i] hashtable[nums[i]] = i return []
202. 快乐数
编写一个算法来判断一个数n是不是快乐数
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
思路
1. 给一个数字n,确定他的下一个数字是什么。这要求我们按照题目要求做数位分离,求平方和。
2. 按照一系列数字来判断我们是否进入了循环。用哈希集合来实现,每次生成链中的下一个数字时,我们都会检查它是否已经在哈希集合中;如果在哈希集合,意味着处于循环,返回false;如果不在,则添加之。
代码如下
def isHappy(self, n: int) -> bool: def get_next(n): total_sum = 0 while n > 0: n, digit = divmod(n, 10) total_sum += digit ** 2 return total_sum seen = set() while n != 1 and n not in seen: seen.add(n) n = get_next(n) return n == 1
242. 有效的字母异位词
题目描述
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。
若s和t中每个字符出现的次数都相同,则称s和t互为字母异位次。
思路
1. 哈希映射
2. 首先判断两个字符串长度是否相等,不相等则直接返回 false
3. 若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t
4. s 负责在对应位置增加,t 负责在对应位置减少
5. 如果哈希表的值都为 0,则二者是字母异位词
代码如下
from collections import Counter, defaultdict class Solution: def isAnagram(self, s: str, t: str) -> bool: if len(s) != len(t): return False record = [0] * 26 for i in s: ss=ord(i) # 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了 record[ord(i) - ord('a')] += 1 for j in t: record[ord(j) - ord('a')] -= 1 for item in record: if item != 0: return False return True
349. 两个数组的集合
题目简述
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
思路
1. 定义两个哈希集合存储元素
2. 遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值
代码如下
class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: set1 = set(nums1) set2 = set(nums2) return self.set_intersection(set1, set2) def set_intersection(self, set1, set2): if len(set1) > len(set2): return self.set_intersection(set2, set1) return [x for x in set1 if x in set2]
标签:202,return,target,nums,day6,self,int,哈希,两数 From: https://www.cnblogs.com/cp1999/p/17237194.html