力扣--两数之和两种方法

题目:https://leetcode-cn.com/problems/two-sum/

题目

以下代码使用C++语言,但是不影响阅读。

方法一:暴力法

该题使用暴力法很简单,只需要将target减去nums中的元素并且在遍历一下是否存在与之相等的元素。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
       for(int i=0;i<nums.size();i++)
        {
                int less  = target - nums[i];
                for(int u = i+1;u<nums.size();u++)
                {
                    if(less  == nums[u])
                        return vector<int> {i,u};
                }
        }
        return vector<int> {};
    }
};

执行结果

这个方法的时间复杂度是O(n²)

方法二:哈希表

先将nums中的值和下标写进哈希表中,跟暴力法一样,我们需要查找target减去的nums中的值是否在哈希表中。如果存在则返回他们的下标

class Solution {
public:
	vector<int> twoSum(vector<int>& nums, int target)
	{
		
		map<int, int> compare;
		for (int i = 0; i < nums.size(); i++)
			compare.insert({ nums[i],i });
		for (int i = 0; i < nums.size(); i++)
		{
			int aim = target - nums[i];
			if (compare.find(aim) != compare.end() && compare.find(aim)->second != i)
			{
				return vector<int> {i,compare.find(aim)->second};
			}
		}
		return vector<int> {};

	}
};

result

笔者也是一个刚开始学算法的小白,所以大佬轻喷,如果有更好的解法希望能评论告诉我,我可以学习,提前谢过(抱拳)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值