LeetCode-1-two-sum
一、问题描述
给定一个int类型的数组nums,和一个int类型的target。在数组nums中找到两个数,这两个数之和等于target,返回这两个数的下标。(可以假定只有一对这样的数)
例子:
nums = [2, 7, 11, 15], target = 9
返回[0,1]
二、问题解答
1、暴力解法
从nums的第一个数开始,使用该数和后面的每个数进行比较,知道找到和为target的数
vector<int> twoSum(vector<int>& nums, int target) { vector<int> v; for (int i = 0; i < nums.size(); i++) for (int j = i; j < nums.size(); j++) if (i != j && nums[i] + nums[j] == target) { v.push_back(i); v.push_back(j); } return v; }
2、使用map,减少寻找时间
vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; map<int, int> hm; for (int i = 0; i < nums.size(); i++) { int temp = target - nums[i]; if (hm.find(temp) != hm.end()) { result.push_back(hm[temp]); result.push_back(i); return result; } hm[nums[i]] = i; } return result; }