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