-
题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。 -
代码
class Solution: def searchInsert(self, nums: List[int], target: int) -> int: start,end=0,len(nums) while start < end: mid = (start+end)//2 if nums[mid] < target: start = mid + 1 else: end = mid return start
-
题目
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。 -
代码
class Solution: def isHappy(self, n: int) -> bool: sum_set = set() while n != 1: mysum = 0 while n >0: mysum += (n%10)**2 n = n//10 if mysum in sum_set: return False else: sum_set.add(mysum) n = mysum return True
-
题目
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。 -
代码
class Solution: def isIsomorphic(self, s: str, t: str) -> bool: return list(map(s.index,s))==list(map(t.index,t))
-
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
-
代码
class Solution: def isAnagram(self, s: str, t: str) -> bool: from collections import Counter s = Counter(s) t = Counter(t) if s == t: return True else: return False
-
题目
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。 -
代码
class Solution: def wordPattern(self, pattern: str, str: str) -> bool: str = str.split() return list(map(pattern.index,pattern)) == list(map(str.index,str))
-
题目
给定两个数组,编写一个函数来计算它们的交集。
-
代码
class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: return set(nums1) & set(nums2)
-
题目
给定两个数组,编写一个函数来计算它们的交集。
说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 -
代码
class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: from collections import Counter nums1_dict = Counter(nums1) res = [] for i in nums2: if nums1_dict[i] > 0: res.append(i) nums1_dict[i] -= 1 return res
-
题目
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。
-
代码
class Solution: def splitArray(self, nums: List[int], m: int) -> int: def helper(mid): res = tmp = 0 for num in nums: if tmp + num <= mid: tmp += num else: res += 1 tmp = num return res + 1 lo, hi = max(nums), sum(nums) while lo < hi: mid = (lo + hi) // 2 if helper(mid) > m: lo = mid + 1 else: hi = mid return lo
-
题目
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
-
代码
class Solution: def frequencySort(self, s: str) -> str: from collections import Counter s_dic = Counter(s) s = sorted(s_dic.items(), key=lambda item:item[1], reverse = True) res = '' for key, value in s: res += key * value return res
-
题目
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
-
代码
class Solution: def singleNonDuplicate(self, nums: List[int]) -> int: left,right = 0,len(nums)-1 while left < right: mid = (left+right) // 2 if nums[mid] == nums[mid^1]: left = mid + 1 else: right = mid return nums[left]
参考:https://github.com/datawhalechina/team-learning-program/blob/master/LeetCodeClassification/3.查找.md