题目:
输入一个递增排序的数组,和一个数字s,在数组中查找两个数,使得它们的和正好是数字s,如果有多对数字的和等于s,只需要任意输入一对即可
算法原理:
利用单调性!使用双指针算法!
设立左右指针分别指向最左端和最右端,然后让这两个数相加,查看是否等于我们需要的数字s
如果不等于,则查看是大于还是小于数字s
如果是小于数字s则左边指针往右移动,如果是大于数字s则右边指针往左移动
因为如果是小于s,那么左端指向的数字和数组内任意数字相加都小于s,所以需要右移动
如果是大于,则右端指向的数字和数组内任意数字相加都大于s,所以需要左移动
最后如果左端指向的和右端指向的相加得出等于数字s则直接返回左右指针指向的数字即可!
代码编写:
- 最后的那个else后面的写法是C++的一种语法,因为如果返回值是vector且返回值是多个,则可以使用这种写法 {nums[left],num[right]}