1. 基础应用
适用背景1: 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
核心代码:
# 指针从同一侧走
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums1 = sorted(nums1)
nums2 = sorted(nums2)
n1 = 0
n2 = 0
ret = []
while n1 < len(nums1) and n2 < len(nums2):
if nums1[n1] == nums2[n2]:
ret.append(nums1[n1])
n1 += 1
n2 += 1
elif nums1[n1] < nums2[n2]:
n1 += 1
else:
n2 += 1
return ret
适用背景2: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
# 指针从两边走
class Solution:
def intersect(self, data):
l = 0
r = len(data) - 1
while l < r:
data[l], data[r] = data[r], data[l]
l += 1
r -= 1
return data