十大排序
题目一:922. 按奇偶排序数组 II
给定一个非负整数数组 A
, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i]
为奇数时,i
也是奇数;当 A[i]
为偶数时, i
也是偶数。
你可以返回任何满足上述条件的数组作为答案。
示例:
1 | 输入:[4,2,5,7] |
提示:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
思路:奇偶下标的错误数进行交换。
代码:
1 | def sortArrayByParityII(A): |
题目二:349. 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
1 | 输入: nums1 = [1,2,2,1], nums2 = [2,2] |
示例 2:
1 | 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] |
说明:
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
思路一:采用字典,时间O(m+n),空间O(min(m,n))
采用字典存储nums1的数,然后遍历nums2的数,一旦在字典中则加入结果中
代码:
1 | from collections import Counter |
思路二:排序,时间O(mn),空间O(1)
对两个数组进行排序,同时遍历两个数组
代码
1 | class Solution: |
思路三:采用集合交集特性,平均时间O(min(m,n)),最坏时间O(m*n),空间O(m+n)
代码
1 | def intersection(nums1, nums2): |
题目三:976. 三角形的最大周长
给定由一些正数(代表长度)组成的数组 A
,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0
。
示例 1:
1 | 输入:[2,1,2] |
示例 2:
1 | 输入:[1,2,1] |
示例 3:
1 | 输入:[3,2,3,4] |
示例 4:
1 | 输入:[3,6,2,3] |
思路:反向排序,第一个满足A[i+2] + A[i+1] > A[i]为所求
代码
1 | def largestPerimeter(A): |
题目四:242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
1 | 输入: s = "anagram", t = "nagaram" |
示例 2:
1 | 输入: s = "rat", t = "car" |
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路一:排序,比较s和t
代码一
1 | def isAnagram(s,t): |
思路二:字典
代码二:
1 | from collections import Counter |