leetcode-two sum(2014.4.3)

来源:互联网 发布:住宅成交数据 编辑:程序博客网 时间:2024/05/26 09:53
该问题和编程之美中的相似问题有所区别,编程之美中是要返回具体的两个值,而该题是要返回两个标志。
所以不能先行排序将之处理为有序序列。
尝试采用map将数值和标志位进行关联。出现问题:向量中的值有可能是重复的!这也是做哈希要考虑的一个问题,有冲突。

参考的网上的方法,用结构体来建立数组值和下标的关系:
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;        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
原创粉丝点击