#leetcode167

虎年第一天第一题

好久没写了,想说的话有好多,以至于写题解没用英文,但又没什么好说的,哎,说好的2021年终总结也没写,鸽王就是我了...

话不多说,进入正题!

题目描述

#leetcode167

一开始我比较懵的是 给定下标从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;
    }
};

虽然说是过了,但我觉得我写的程式不美观,不优雅。

上一篇:学习笔记8


下一篇:刷题-旋转数组的最小数字