双指针: 有序数组的 Two Sum(167)
Input: numbers=[2,3,4,6,8,11,15], target=9 Output: index1=1, index2=2
题目描述:在有序数组中找出两个数,使它们的和为 target。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
#python
numbers=[2,3,4,6,8,11,15]
lenth=len(numbers)
indexMin=0
indexMax=lenth-1
target=9
while True:
if numbers[indexMin]+numbers[indexMax]>target:
indexMax-=1
if numbers[indexMin]+numbers[indexMax]<target:
indexMin+=1
if numbers[indexMin]+numbers[indexMax]==target:
print(indexMin,indexMax)
break
if indexMin==indexMax:
print("无法找到")
indexMin="null"
indexMax="null"
break
index1=indexMin
index2=indexMax
print("index1={}".format(indexMin),"index2={}".format(indexMax))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
//js代码
const array=[2,7, 11, 15]
var indexMin=0
var indexMax=array.length-1
const target=9
while (indexMin<indexMax){
if (array[indexMin]+(array[indexMax])===target) {
console.log(`index1=${indexMin},index2=${indexMax}`)
break
}
if (array[indexMin]+(array[indexMax])>target) {
indexMax--
}
if (array[indexMin]+(array[indexMax])<target) {
indexMin++
}
if (indexMin===indexMax) {
console.log('不存在')
}
}
使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。
- 如果两个指针指向元素的和 sum == target,那么得到要求的结果;
- 如果 sum > target,移动较大的元素,使 sum 变小一些;
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
数组中的元素最多遍历一次,时间复杂度为 O(N)。只使用了两个额外变量,空间复杂度为 O(1)。
(完)
0条看法
最新最后最热
等待你的评论