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回答

liuyubobobo

2022-08-25

是的,只对升序有效,题目中有说明:整个数组是非递减排序的。


但是,这是一个很好的练习,你可以思考一下:

1)为什么现在的这个代码对降序数组出问题了?问题出在哪里?

2)如果给出的数组是降序的,还能使用类似的方法吗?(双指针)如果能,应该怎么写?


继续加油!:)

1
1
老猪他爸
好的,谢谢
2022-08-26
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程