原文题目:
167. Two Sum II - Input array is sorted
读题:
给定一个升序序列,找到两个数加起来等于目标值,并输出索引,注意这里的索引是从1开始的
解题思路:
由于是升序,因此,可以用p指向第一个元素,用q指向最后一个元素,然后判断p和q所指的数加起来是否为目标值,找到则返回,若小于目标值,则p++,若大于目标值,则q++
class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { vector <int> result; int i = 0; //输入保证一定有解,因此不需要考虑numbers的长度小于2的情况,否则这里j就成负数了 int j = numbers.size() - 1; while(i!=j) { if(numbers[i] + numbers[j] == target) { result.push_back(i+1); result.push_back(j+1); break; } else if (numbers[i] + numbers[j] > target) { j--; } else { i++; } } return result; } }; int main() { vector <int> result; vector <int> numbers; Solution s; numbers.push_back(2); numbers.push_back(7); numbers.push_back(11); numbers.push_back(15); int target = 9; int i = 0; result = s.twoSum(numbers,target); for(i = 0; i < result.size();i++) { cout << result[i]<<endl; } }