Leetcode #1 Two Sum

来源:互联网 发布:ajax获取数据 编辑:程序博客网 时间:2024/05/22 01:36

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

大意:给出一个整型数组,给了一个目标数(target),从数组里找出两个数使得他们的和等于target。返回这两个数的下标(下标从1开始)

分析:排序,然后i指向最小的开头,j指向最大的末尾,如果i+j>target那么j往前移动,如果i+j<target那么i往后移动,如果i+j=target,返回i,j的下标(这里指的是未排序前的下标)。所以排序前,先把每个数字的原始下标记录下来。

代码:

struct Node{    int num, pos;};bool cmp(Node a, Node b){    return a.num < b.num;}class Solution {public:    vector<int> twoSum(vector<int> &numbers, int target) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        vector<int> result;        vector<Node> array;
<span style="white-space:pre"></span>//记录原始下标
        for (int i = 0; i < numbers.size(); i++)        {            Node temp;            temp.num = numbers[i];            temp.pos = i;            array.push_back(temp);        }        sort(array.begin(), array.end(), cmp);        for (int i = 0, j = array.size() - 1; i != j;)        {            int sum = array[i].num + array[j].num;            if (sum == target)            {                if (array[i].pos < array[j].pos)                {                    result.push_back(array[i].pos + 1);                    result.push_back(array[j].pos + 1);                } else                {                    result.push_back(array[j].pos + 1);                    result.push_back(array[i].pos + 1);                }                break;            } else if (sum < target)            {                i++;            } else if (sum > target)            {                j--;            }        }        return result;    }};



0 0