题目:
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, and you may not use the same element twice. Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
暴力解决方法:
class Solution { public: vector twoSum(vector & nums, int target) { bool flag = 0; vector result; int temp_size = nums.size()-1;// if don't use this variable,just write it in for(;i注意两点:
1.如果将写成for(int i=0; i<sums.size()-1;i++),leetcode会报compile error,这时需要一个变量来存sums.size()-1;
2.发现第一个for循环里面如果只遍历到数组倒数第二个数,但是用一个单独变量来存储sums.size()-1,总的运行时间会比循环sums.size()次稍慢。
精简一点版本: 使用unordered_map class Solution { public: vector twoSum(vector & nums, int target) { vector result; unordered_map findTheRest; for (int i = 0; i < nums.size(); i++) { int theRest = target - nums[i]; if (findTheRest.find(theRest) != findTheRest.end()) { result.push_back(findTheRest[theRest]); result.push_back(i); break; } findTheRest[nums[i]] = i; } return result; } };原理一样,运行更快的版本:
class Solution { public: vector twoSum(vector & nums, int target) { unordered_map findTheRest; for (int i = 0; i < nums.size(); i++) { int theRest = target - nums[i]; if (findTheRest.find(theRest) != findTheRest.end()) { return{findTheRest[theRest],i}; } findTheRest[nums[i]] = i; } return {}; } };