码迷,mamicode.com
首页 > 其他好文 > 详细

Two Sum

时间:2015-10-28 15:56:34      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

问题链接:https://leetcode.com/problems/two-sum/

解法1:50ms

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> copy = nums;
        quicksort(copy, 0, nums.size() - 1);
        vector<int>::iterator index1 = copy.begin(), index2 = copy.end() - 1;
        while ((*index1 + *index2 ) != target)
        {
            if ((*index1 + *index2) < target)
                ++index1;
            if ((*index1 + *index2) > target)
                --index2;
        }
        int value1 = *index1, value2 = *index2;
        int i1 = 0, i2 = 0;
        for (index1 = nums.begin();index1 != nums.end();++index1)
        {
            if (*index1 == value1 || *index1 == value2)
            {
                if (!i1)
                    i1 = index1 - nums.begin() + 1;
                else
                {
                    i2 = index1 - nums.begin() + 1;
                    break;
                }
            }
        }
        vector<int> result;
        result.push_back(i1);
        result.push_back(i2);
        return result;
    }

    void quicksort(vector<int>& nums, int front, int behind)
    {
        int f = front + 1, b = behind, temp;
        if (front >= behind)
            return;
        while (f != b)
        {
            if (nums[f] > nums[front])
            {
                temp = nums[f];
                nums[f] = nums[b];
                nums[b] = temp;
                --b;
            }
            else
                ++f;
        }
        if (nums[f] > nums[front])
            --f;
        temp = nums[front];
        nums[front] = nums[f];
        nums[f] = temp;
        quicksort(nums, front, f - 1);
        quicksort(nums, f + 1, behind);
    }
};

解法2:24ms

class Solution { 
public: 
    vector<int> twoSum(vector<int>& nums, int target) { 
        map<int, int> value_index; 
        vector<int> result; 
        map<int, int>::iterator iter; 
        int i = 0; 
        for (i = 0;i < nums.size();++i) 
        { 
            iter = value_index.find(target - nums[i]); 
            if (iter != value_index.end()) 
            { 
                result.push_back(iter->second); 
                result.push_back(i + 1); 
                break; 
            } 
            else 
                value_index.insert(pair<int, int>(nums[i], i + 1)); 
        } 
        return result; 
    } 
};

解法3:12ms

class Solution { 
public: 
    vector<int> twoSum(vector<int>& nums, int target) { 
        vector<int> copy = nums; 
        vector<int> result; 
        sort(copy.begin(), copy.end()); 
        int f = 0, b = copy.size() - 1; 
        while ((copy[f] + copy[b]) != target) 
        { 
            if ((copy[f] + copy[b]) < target) 
            { 
                ++f; 
            } 
            if ((copy[f] + copy[b] > target)) 
            { 
                --b; 
            } 
        } 
        int i = 0, index1 = 0, index2 = 0; 
        for (i = 0;i < nums.size();++i) 
        { 
            if ((nums[i] == copy[f]) || nums[i] == copy[b]) 
            { 
                if (!index1) 
                {    
                    index1 = i + 1; 
                } 
                else 
                { 
                    index2 = i + 1; 
                    break; 
                } 
            } 
        } 
        result.push_back(index1); 
        result.push_back(index2); 
        return result; 
    } 
};


Two Sum

标签:

原文地址:http://my.oschina.net/u/2313065/blog/523091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!