1.Two Sum leetcode(array)

来源:互联网 发布:ios刷机软件 编辑:程序博客网 时间:2024/05/01 07:56

Two Sum Add to List QuestionEditorial Solution My
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
注意,本题中所给定的数组不是排好序的,如果是排好序的则只用使用一前一后的两个指针即可,不是排序的则使用hash的方法更简洁。
方法一、超时的解决方案,因为采用了sort,严重建议对于时间特性很有要求的算法来说,最好不要采用该函数,通常最好的排序算法的时间复杂度最低也为O(logn)

vector<int> twoSum(vector<int>& nums, int target) {        int len = nums.size();        int low = 0;        int high = len - 1;        vector<int> result;        sort(nums.begin(),nums.end());        while(low < high)        {            if(nums[low] + nums[high] == target)            {                result.push_back(low);                result.push_back(high);            }            else if(nums[low] + nums[high] > target)            {                high--;            }            else            {                low++;            }        }        return result;    }

方法二、采用hash_map的方法

vector<int> twoSum(vector<int>& nums, int target) {        map<int,int> mp;        vector<int> result;        for(int i= 0; i<nums.size(); i++)        {            mp[nums[i]] = i;        }        for(int i = 0; i<nums.size(); i++)        {            map<int,int> :: iterator iter;            iter = mp.find(target - nums[i]);            if(iter != mp.end() && iter->second != i) //注意此处需要加入&& iter->second != i进行判断,以防止nums[i]+nums[i]==target这种情况发生,若发生则只执行一遍循环便终止            {                //以下采用两次判断是注意输出的格式是小数在前,大数在后                if(i>iter->second)                {                    result.push_back(iter->second);                    result.push_back(i);                }                else if(i<iter->second)                {                    result.push_back(i);                    result.push_back(iter->second);                 }                break;                  }        }        //cout<<result.size()<<"hi";        return result;    }
0 0