Leetcode: Topic 1 给定一个整数数组 nums 和一个目标值 target....

 题目描述:

1、对于这个题目,第一个想到的就是暴力法,两遍for循环解决(暴力法的弱点就是空间复杂度及其的高。。O(n2))

vector<int> twoSum(vector<int>& nums, int target)
    {
        vector<int> s;
        for(int n = 0; n < nums.size(); ++n)
        {
            for(int j = n + 1; j <nums.size(); ++j)
            {
                if((nums[n] + nums[j]) == target)
                {
                    s.push_back(n);
                    s.push_back(j);
                    break;
                }
            }
            if(s.size() > 0)
            {
                break;
            }
        }
        return s; 
    }

2、使用map(map用来做查找,效率非常稳定,底层是红黑二叉树)

vector<int> twoSum(vector<int>& nums, int target)
{
	vector<int> s;
	std::map<int, int> map;
	for (int n = 0; n < nums.size(); ++n)
	{
		int distance = target - nums.at(n);

		std::map<int, int>::const_iterator iter = map.find(distance);
		if (iter != map.end())
		{
			s.push_back(iter->second);
			s.push_back(n);
			break;
		}
		map[nums[n]] = n;
	}
	return s;
}

提交效率也是非常不错的

3、拓展:map底层是一个红黑二叉会默认排序,导致效率有时候不稳定,这时候我们转而使用unordered_map,会让效率极大程度稳定

vector<int> twoSum(vector<int>& nums, int target)
    {
        vector<int> s;
	    std::unordered_map<int, int> map;
	    for (int n = 0; n < nums.size(); ++n)
	    {
		    int distance = target - nums.at(n);

		    std::unordered_map<int, int>::const_iterator iter = map.find(distance);
		    if (iter != map.end())
		    {
			    s.push_back(iter->second);
			    s.push_back(n);
			    break;
		    }
		    map[nums[n]] = n;
	    }
	    return s;
    }

红色部分是使用map提交的结果,绿色部分是使用unorder_map提交的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值