0224leetcode刷题5道python

350

题目描述:
给定两个数组,编写一个函数来计算它们的交集。

示例:
在这里插入图片描述
解答:

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        inter = set(nums1) & set(nums2)
        l = []
        for i in inter:
            l += [i] * min(nums1.count(i), nums2.count(i))  
        return l        

378

题目描述:
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。

示例:
在这里插入图片描述
解答:

class Solution:
    def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
        li=[]
        for i in matrix:
            li+=i
        li.sort()

        return li[k-1]

540

题目描述:
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。

示例:
在这里插入图片描述
解答:

class Solution:
    def singleNonDuplicate(self, nums: List[int]) -> int:
        res=0
        for i in nums:
            res^=i
        return res

718

题目描述:
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

示例:
在这里插入图片描述
解答:

class Solution:
    def findLength(self, A: List[int], B: List[int]) -> int:
        '''
        l1 = len(A) 
        l2 = len(B) 
        dp = [[0 for _ in range(l2+1)] for _ in range(l1+1)] 
        for i in range(1,l1+1): 
            for j in range(1,l2+1): 
                if A[i-1] == B[j-1]: 
                    dp[i][j] = dp[i-1][j-1] + 1 
        return max(max(row) for row in dp)
        '''
        result = i = 0
        if A and B:
            a, b, n = ''.join(map(chr, A)), ''.join(map(chr, B)), min(len(A), len(B))
            while i + result < n:
                if a[i:i+result+1] in b:
                    result += 1
                else:
                    i += 1
        return result

面试题10.05

题目描述:
稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。

示例:
在这里插入图片描述
解答:

class Solution:
    def findString(self, words: List[str], s: str) -> int:
        #注意非空数组已排序
        left,right=0,len(words)-1
        while left<=right:
            mid=(left+right)//2
            tmp=mid
            while mid>=left and words[mid]=='':
                mid-=1
            if words[mid]==s:
                return mid
            elif words[mid]>s:
                right=mid-1
            else:
                left=tmp+1
        return -1

猜你喜欢

转载自blog.csdn.net/yeqing1997/article/details/114007943