leetcode练习1(两数之和)

题目:两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解法:最简单的就是暴力解法,即两次遍历数组,得到满足条件的两个数,但是通过哈希表可以实现一次遍历数组就可以得到满足条件的两个数并返回,具体代码如下:
哈希法:

#include "iostream"
using namespace std;
#include"unordered_map"
class solution {
public:
	vector<int> a;
	vector <int> find(vector <int>& k, int target)
	{
		unordered_map<int, int> m;
		for (int i=0;i < k.size();i++)
		{
			m[k[i]] = i;
			if (m.find(target - k[i]) != m.end()&&m[target-k[i]]!=i)
			{
				return { m[target - k[i] ], i};
			}
		}
	}
};
int main()
{
	solution solu;
	vector<int>a,b;
	a = { 1,2,3,4,5,6,7 };

	b=solu.find(a, 9);
	for (auto& x : b)
	{
		cout << x<<" ";
	}
}

在进行插入数据的同时判断该数所对应的目标数是否存在。

暴力解法:

int main()
{
	vector<int> k,b;
	int target;
	k = { 1,2,3,4,5,6 };
	target = 9;
	for (int i = 0;i < k.size();i++)
	{
		for (int j = i + 1;j < k.size();j++)
		{
			if (k[i] + k[j] == target)
			{
				b = { i,j };
				for (auto& x : b)
				{
					cout << x << " ";
				}
			}
		}

	}
}

你可能感兴趣的:(leetcode)