【leetcode】two-sum

来源:互联网 发布:淘宝详情图片格式 编辑:程序博客网 时间:2024/06/06 16:56

该题目在编程之美上看过该题目,解题思路很清晰,先排序再从头和尾遍历一次,但写起来还是有很多问题:

1.      输出的下标为未排序的vector内元素的下标,因此排序过程中需要记录下标位置,我为了省事直接使用c++中sort函数,然后通过查找元素在原vector中位置得到下标;因此也引出了另一个问题,如果两个元素相同,得到相同的位置;

2.      要求两个下标位置从小到大;


//2014年8月22日19:17:30//2014年8月22日19:44:32#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public:    vector<int> twoSum(vector<int> &numbers, int target) {        vector<int> retVec;        vector<int> num = numbers;        sort(numbers.begin(),numbers.end());        int i = 0,j = numbers.size()-1;        while(i != j){            if(numbers[i]+numbers[j] > target){                j--;                continue;            }            if(numbers[i]+numbers[j] < target){                i++;                continue;            }            if(numbers[i]+numbers[j] == target){                int smaller,bigger;                smaller = find(num.begin(),num.end(),numbers[i])-num.begin();                if(numbers[i] != numbers[j]){                    bigger = find(num.begin(),num.end(),numbers[j])-num.begin();                }                else{                    vector<int>::iterator it = find(num.begin(),num.end(),numbers[i]);                    bigger = find(it+1,num.end(),numbers[i])-num.begin();                }                if(bigger < smaller){                    retVec.push_back(bigger+1);                    retVec.push_back(smaller+1);                }                else{                    retVec.push_back(smaller+1);                    retVec.push_back(bigger+1);                }                return retVec;            }        }        return retVec;    }};int main(){    int num[] = {5,75,25};    vector<int> numbers(num,num+3);    int target = 100;    Solution A;    vector<int> result = A.twoSum(numbers,target);    for(auto d:result){        cout << d << endl;    }    return 0;}


0 0
原创粉丝点击