C语言重构【167】两数之和 II - 输入有序数组

it2023-06-09  77

文章目录

所有题目源代码:[Git地址](https://github.com/ch98road/leetcode)题目方案:复杂度计算

所有题目源代码:Git地址

题目

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 27 之和等于目标数 9 。因此 index1 = 1, index2 = 2

方案:

#include <iostream> #include <string> #include <stack> #include <vector> using namespace ::std; class Solution { public: vector<int> twoSum(vector<int> &numbers, int target) { int len = numbers.size(); int left = 0,right = len - 1; while(left<right){ if (numbers[left]+numbers[right]>target) { right--; }else if(numbers[left]+numbers[right]<target){ left++; } else { return vector<int>{left+1,right+1}; } } return vector<int>{0, 0}; } }; int main() { Solution s; // int a[] = {2, 7, 11, 15}; int a[] = {5,25,75}; vector<int> num(a, a + 3); int target = 9; s.twoSum(num, target); }
复杂度计算
时间复杂度:O(n)空间复杂度:O(1)
最新回复(0)