leetcode_two sum

来源:互联网 发布:windows 8.1专业版激活 编辑:程序博客网 时间:2024/05/17 22:24

这是leetcode第一道题目,属于easy类型。题目的实例内容是:

Given nums = [2,7,11,15], target = 9,Beacause nums[0]+nums[1] = 9return [0,1]

这道题用到的主要算法步骤如下:

将数组按照从小到大的顺序排序同时从数组num两端开始扫描(序号分别为i,j)判断num[i]+num[j]是否等于target若num[i]+num[j] > target,则还需要减小大数num[j],也就是j--num[i]+num[j] < target, 则还需要增加小数num[i],也就是i++

本题需要解决的两个主要问题有:

找到2个目标数如何返回对应的下标

对于问题2的解决办法,我用的是一种很笨的方法,也就是再创建一个新的数组来存储原始的未排序的数组,然后将找到的目标
数与新的数组一一对应查找,直到找到目标数在数组中的位置。

具体解决代码如下(C++)

class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {        int i, j;        i = 0;        j = nums.size() - 1;        vector<int> two_sum;        vector<int> temp;        temp = nums;        sort(nums.begin(), nums.end());        while(i < j)        {            int sum = nums[i]+ nums[j];            if(sum == target)            {                for(int k = 0; k < temp.size(); k ++)                {                    if(temp[k] == nums[i] || temp[k] == nums[j])                    {                        two_sum.push_back(k);                    }                }                return two_sum;            }            else if(sum > target)            {                j --;            }            else            {                i ++;            }        }        return two_sum;    }};
0 0
原创粉丝点击