python 刷leetcode 的题目(4)

1、两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集。

例如:
给定 nums1 = [1, 2, 2, 1]nums2 = [2, 2], 返回 [2, 2].

注意:

  •    输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  •    我们可以不考虑输出结果的顺序。

跟进:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?

代码如下:必须说明的是,下面的代码前两个都没有通过,第三个方法已经通过了,互相学习,我也是看了别人代码才知道的。

class Solution:
    def intersect(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        ### the first method ,but have not passed
        # length1 = len(nums1)
        # length2 = len(nums2)
        # if length1 > length2:
        #     target = [i for i in nums2 if i in nums1]
        # else:
        #     target = [i for i in nums1 if i in nums2]
        # return target
        
        ### the second method ,but have not passed
#         target = []
#         length1 = len(nums1)
#         length2 = len(nums2)
    
#         for i in nums2:
#             if i in nums1:
#                 target.append(i)
#                 nums2.pop(nums2.index(i))
        
#         return target
        
        #### the third method
        record, res = {}, []
        for num in nums1:
            record[num] = record.get(num, 0) + 1
        for num in nums2:
            if num in record and record[num]:
                res.append(num)
                record[num] -= 1
        return res
                
       

2、移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

代码如下:第二种方法没有通过,第一种方法通过了。

class Solution:
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        count = 0 
        for i in range(len(nums)):
            if nums[i] != 0:
                nums[count] = nums[i]
                count += 1            
        nums[count:] = [0] * (len(nums) - count)
         
        # return nums
        
         ##### the second method
#         new_array = []
#         for i in range(len(nums)):
#             if nums[i] != 0:
#                 new_array.append(nums[i])
#         for j in range(len(new_array)):
#             nums[j] = new_array[j]
#         for k in range(len(new_array), len(nums)):
#             nums[k] = 0
#         return nums

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值