用python写leetcode【7】 --两个数组的交集 II(350)、递增的三元子序列(334)
2019-03-14 13:30
591 查看
文章目录
两个数组的交集 II(350)
题目
给定两个数组,编写一个函数来计算它们的交集。
示例 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(object): def intersect(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ ans = [] nums1.sort() nums2.sort() i = j = 0 while i<len(nums1) and j < len(nums2): if nums1[i] == nums2[j]: ans.append(nums1[i]) i+=1 j+=1 elif nums1[i] < nums2[j]: i+=1 else: j+=1 return ans
递增的三元子序列(334)
题目
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。
数学表达式如下:
如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,
使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。
示例 1:
输入: [1,2,3,4,5]
输出: true
示例 2:
输入: [5,4,3,2,1]
输出: false
思路
创建两个变量分别用于存放目前的第一小的数a和第二小的数b,遍历数组,如果有数大于第二小的数,则成功,如果数小于最小的数a,则把该数赋值a,如果该数在a-b之间,则把该数赋值给b。整体思路就是记录三元数组中前两个值为a,b,并不断更新a,b已获得最有可能成功的组合。
代码
class Solution: def increasingTriplet(self, nums): """ :type nums: List[int] :rtype: bool """ res = [float('inf'), float('inf')] for n in nums: if n > res[1]: return True if n <= res[0]: res[0] = n else: res[1] = n return False
相关文章推荐
- LeetCode--350. Intersection of Two Arrays II(两个数组的交集)Python
- 【LeetCode】Python实现-350. 两个数组的交集 II
- [leetcode]两个数组的交集II
- [LeetCode] Intersection of Two Arrays II 两个数组的交集II
- leetcode-350 Intersection of Two Arrays II 求两个数组的交集 面试见到了吗?
- leetcode-两个数组的交集 II
- leetcode_350(求两个数组的交集)
- 【LeetCode】Python实现-349. 两个数组的交集
- leetcode-334- 递增的三元子序列(increasingly triplet subsequence)-java
- leetCode 349号题目详解 两个数组的交集 ,python3两种方式实现, 复杂度分别为O(n^2) 和 O(n)
- LeetCode:两个数组的交集 II
- golang_算法: leetcode_数组06-两个数组的交集 II
- leetcode 350. Intersection of Two Arrays II 两个数组的交集
- Leetcode 两个数组的交集 II
- Leetcode 350. Intersection of Two Arrays II 两个数组的交集 II
- leetcode--中级算法--数组和字符串--递增的三元子序列(JavaScript)
- [easy]【leetcode】【java】 Intersection of Two Arrays II 两个数组的交集
- LeetCode(初级算法)数组篇--两个数组的交集II c++
- Leetcode:350. Intersection of Two Arrays II 求两个数组的交集
- [LeetCode]350. Intersection of Two Arrays II(求两个数组交集 II)