twoSum升序降序的处理代码不同
来源:3-6 对撞指针 Two Sum II - Input Array is Sorted
老猪他爸
2022-08-25
老师,请教下,two_sum的问题,讲解的代码只能对升序的数组有效吧,降序的好像结果是错的
package main
import "fmt"
// 有序数组和为定值,返回两者索引
func twoSum(nums []int, target int) [2]int {
l, r := 0, len(nums)-1
for l < r {
if nums[l]+nums[r] == target {
return [2]int{l, r}
} else if nums[l]+nums[r] > target {
r--
} else {
l++
}
}
return [2]int{-1, -1}
}
func main() {
a := []int{1, 2, 3, 4, 5}
// c := []int{5, 4, 3, 2, 1}
b := twoSum(a, 7)
fmt.Println(b)
}
写回答
1回答
-
是的,只对升序有效,题目中有说明:整个数组是非递减排序的。
但是,这是一个很好的练习,你可以思考一下:
1)为什么现在的这个代码对降序数组出问题了?问题出在哪里?
2)如果给出的数组是降序的,还能使用类似的方法吗?(双指针)如果能,应该怎么写?
继续加油!:)
112022-08-26
相似问题