这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战
题7
两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9] 说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
我们可以不考虑输出结果的顺序。
进阶:
如果给定的数组已经排好序呢?你将如何优化你的算法?
如果 nums1 的大小比 nums2 小很多,哪种方法更优?
如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
相关标签
- 数组
- 哈希表
- 双指针
- 二分查找
- 排序
笨方法暴力求解
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
res = []
for row in nums1:
if row in nums2:
if nums1.count(row)<nums2.count(row):
if row not in res:
for _ in range(nums1.count(row)):
res.append(row)
else:
if row not in res:
for _ in range(nums2.count(row)):
res.append(row)
return res
执行结果:
题8
递增的三元子序列
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
示例 1:
输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意
示例 2:
输入:nums = [5,4,3,2,1]
输出:false
解释:不存在满足题意的三元组
示例 3:
输入:nums = [2,1,5,0,4,6]
输出:true
解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6 提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
进阶:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?
相关标签
- 贪心
- 数组
class Solution:
def increasingTriplet(self, nums: List[int]) -> bool:
'''
滑动窗口问题 窗口大小为3
'''
m = max(nums)
n = max(nums)
for i in range(len(nums)):
if nums[i] <= m:
m = nums[i]
elif nums[i] <= n:
n = nums[i]
else:
return True
return False
执行结果: