likaiming

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;
}

  

相关文章: