zoukankan      html  css  js  c++  java
  • 哈希表-两个数组的交集

    解法:由于同一个list中可能存在重复元素,所以考虑采用计数的方式解决问题,具体思路如下:

    首先构建一个dict来记录list中的元素个数,称为count_dict;count_dict中的元素是一个长度为2的list,分别存储nums1和nums2中元素i的个数

    class Solution:
        def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
            count_dict = {}     
            for i in nums1:
                if i not in count_dict:
                    count_dict[i] = [1, 0]
                else:
                    count_dict[i][0] += 1
            for i in nums2:
                if i not in count_dict:
                    # nums2中有但nums1中没有的元素,就没必要再做记录了
                    continue
                count_dict[i][1] += 1
                result_list = []
            for key in count_dict:
                # 遍历,统计某个元素i在nums1和nums2中出现次数的较小值num,若num不为0,则将num个元素i加入到结果list(result_list)中
                num = min(count_dict[key])
                if num:
                    result_list += [key]*num
            return result_list
    

     

     列表还支持拼接操作

     

     

    class Solution:
        def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
            count_dict = {}
            for i in nums1:
                if i not in count_dict:
                    count_dict[i] = 1
    
            new_arr = []
            for i in nums2:
                if count_dict.get(i):
                    new_arr.append(i)
                    count_dict[i] -= 1
            return new_arr
    count_dict[i] -= 1是为了count_dict.get(i)判断用
    如果不减1,就会出现重复
    如:
    nums1 = [4,9,5, 4]
    nums2 = [9,4,9,8,4]

     

  • 相关阅读:
    codefroces 946F Fibonacci String Subsequences
    [HNOI2010]MATRIX 矩阵
    [HNOI2010]STONE取石头游戏
    [HNOI2010]PLANAR
    [HNOI2010]BUS 公交线路
    [HNOI2010]CHORUS 合唱队
    [HNOI2011]赛车游戏
    [HNOI2011]数矩形
    [HNOI2012]与非
    [BZOJ4200][NOI2015]小园丁与老司机
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13163961.html
Copyright © 2011-2022 走看看