虎年第一天第一题
好久没写了,想说的话有好多,以至于写题解没用英文,但又没什么好说的,哎,说好的2021年终总结也没写,鸽王就是我了...
话不多说,进入正题!
题目描述
一开始我比较懵的是 给定下标从1开始的数组 和 最后一段字(是我断章取义了,理解成每个数每次只能遍历1次),
我觉得题目应该这样表述最好:返回的数组下标不能相同,比如说数组第一个数字是6,目标值是12,返回的下标
不能是[1,1],这种表达就很清晰了。
后来看了Algocasts的讲解后就很明朗了,和我一开始想的一样。因为是递增数组,可以利用对向的双指针来解题。
时间复杂度:O(n) 空间复杂度:O(1)
程式如下:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> s(2,-1);
int i = 0;
int j = numbers.size() - 1;
while (i < j)
{
if (numbers[i] + numbers[j] == target)
{
s[0] = i + 1;
s[1] = j + 1;
return s;//一开始没写这一行,导致的报错是 超出时间限制
}else if (numbers[i] + numbers[j] > target)
{
--j;
}else {
++i;
}
}
return s;
}
};
虽然说是过了,但我觉得我写的程式不美观,不优雅。