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

今天写了三道题目
分别是
242. 有效的字母异位词、349. 两个数组的交集、1. 两数之和

  1. 有效的字母异位词
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        # Solution1 使用数组;
        record = [0] * 26 # 创建一个数组;
        for i in s:
            # 我们并不需要记住“a”的ASCII值,只需要求出一个相对数值就可以了;
            record[ord(i) - ord('a')] += 1
        
        for j in t:
            record[ord(j) - ord('a')] -= 1
        
        for m in range(26):
            if record[m] != 0:
                #record数组如果有的元素不为零0,说明字符串s和t一定是谁多了字符或者谁少了字符
                return False
        
        return True

  1. 两个数组的交集
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # # Solution1 用字典和集合来解决;
        # table = {}
        # for num in nums1:
        #     table[num] = table.get(num, 0) + 1
        
        # # 使用集合存储结果
        # res = set()
        # for num in nums2:
        #     if num in table:
        #         res.add(num)
        #         del table[num]
        # return list(res)

        # Solution2 使用数组来解决(适用于“数”<=1000的情况)

        count1 = [0]*1001
        count2 = [0]*1001

        result = []

        for i in range(len(nums1)):
            count1[nums1[i]]+=1

        for j in range(len(nums2)):
            count2[nums2[j]]+=1

        for k in range(1001):
            if count1[k]*count2[k]>0:
                result.append(k)
                
        return result












        # # Solution3 用集合直接来解决
        # return list(set(nums1) & set(nums2))  # "&"用于取交集
  1. 两数之和
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # Solution1 使用字典
        records = dict()

        for index, value in enumerate(nums):  
            if target - value in records:   # 遍历当前元素,并在map中寻找是否有匹配的key
                return [records[target- value], index]
            records[value] = index    # 如果没找到匹配对,就把访问过的元素和下标加入到map中
        return []

你可能感兴趣的:(算法)