iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
自我挑戰組

每日LeetCode解題紀錄系列 第 17

LeetCode解題 Day17

350. Intersection of Two Arrays II

https://leetcode.com/problems/intersection-of-two-arrays-ii/


題目解釋

你會得到兩組數列num1、num2 ,請回傳兩組數列的交集

example

https://i.imgur.com/CSrfydc.png

解法

一開始有想到兩種解法

第一種是先比較兩者的長度,之後把短的那組數列出現的數字對對看長的那組有沒有出現,有的話就把它記錄起來並從廠的那組數列刪掉

程式碼1

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        
        if len(nums1) > len(nums2):
            nums1, nums2 = nums2, nums1
        
        ans = []
        for i in nums1:
            if i in set(nums2):
                n = nums2.pop(nums2.index(i))
                ans.append(n)
        
        return ans

程式碼2

第二種是先把兩組數列都排序,排完後從兩組數列的第一個數字同時比較:

  1. 如果數列1的比較大,就拿出數列2的下個數字來比較
  2. 如果數列1的比較小,那就換數列1的下個數字出來比較
  3. 如果兩者相同,那就是我們要的數字了
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        
        nums1.sort()
        nums2.sort()
        
        ptr1 = 0
        ptr2 = 0
        ans = []
        while ptr1 != len(nums1) and ptr2 != len(nums2):
            
            if nums1[ptr1] > nums2[ptr2]:
                ptr2 += 1
            
            elif nums1[ptr1] < nums2[ptr2]:
                ptr1 += 1
                
            else:
                ans.append(nums1[ptr1])
                ptr1 += 1
                ptr2 += 1
        
        return ans

閒聊

今天題目是簡單題目,在discussion有很多蠻有趣的解法

我的解法都只是基本中的基本


上一篇
LeetCode解題 Day16
下一篇
LeetCode解題 Day18
系列文
每日LeetCode解題紀錄30

尚未有邦友留言

立即登入留言