心路历程:
很简单的题,双层暴力就可以,用双指针的话快一点。暴力时间复杂度O( n 2 n^2 n2),双指针时间复杂度O(nlogn) + O(n) + O(n) = O(nlogn)。
注意的点:
1、题目需要返回原数组的索引,所以排序后还需要对应原数组,还好只要返回唯一解。
2、对应原数组的时候注意处理两个指针赋值不能相同的情况(无法直接用.index())
3、right指针大于left指针即可,总是有时候把左右指针写反。
解法:排序、双指针、返回对应原数组索引
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# 双指针newnums = sorted(nums)left = 0right = len(nums) - 1while right > left: if newnums[left] + newnums[right] == target:breakelif newnums[left] + newnums[right] > target:right -= 1else:left += 1assert left != rightl1, l2 = 0, 0flag = Falsefor i in range(len(nums)):if newnums[left] == nums[i] and not flag:l1 = iflag = Trueelif newnums[right] == nums[i]:l2 = ireturn [l1, l2]