-
思路一
BF 两个for循环,外层确定第一个数,内层确定第二个数。时间复杂度O(n²),空降复杂度O(1) -
思路二
遍历数组,用一个Set保存已经遍历过的数字。时间复杂度O(n),空间复杂度O(n) -
思路三
双指针:因为是排序好的,一个指针在头部,一个在尾部。然后求和,如果和大于target那就right–,如果小于,那就left++。时间复杂度O(n),空间复杂度O(1)public int[] twoSum(int[] numbers, int target) { int left = 0, right = numbers.length - 1; int sum = numbers[left] + numbers[right]; while(left < right && sum != target){ if(sum > target) right--; else left++; sum = numbers[left] + numbers[right]; } return new int[]{left,right}; }
补充
一般数组中两数求和可以先考虑双指针做法
Go版本
func twoSum(numbers []int, target int) []int {
left, right := 0, len(numbers)-1
for left < right {
sum := numbers[left] + numbers[right]
if sum == target {
return []int{left, right}
} else if sum > target {
right--
} else {
left++
}
}
return []int{-1, -1}
}