LeetCode#1两数之和(2019.9.6)

题目

给  nums = [2, 7, 11, 15], target = 9

返回 [0, 1]

因为 nums[0] + nums[1] = 2 + 7 = 9
 

 

解答

方法一:暴力(两个月前在LeetCode提交的java)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
        for (int j =0; j < nums.length; j++) {
            if (nums[j] == target - nums[i] && i!=j) {
                return new int[] { i, j };
            }
        }
    }
    throw new IllegalArgumentException("No two sum solution");


    }
}

方法二:hash哈希(c++)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int>mapping;
        vector<int>result;
        for(int i=0;i<nums.size();i++){
            mapping[nums[i]]=i;//存储对应数的下标
        }
        for(int j=0;j<nums.size();j++){
            int gap=target-nums[j];//计算需要匹配的数的大小
            if(mapping.find(gap)!=mapping.end()&&mapping[gap]>j){
            //大于j是因为,避免一个数(3)被用两次,比如6=3+3;避免重复判断,例如2+7=7+2
                result.push_back(j);
                result.push_back(mapping[gap]);//结果是两个数
            }
        }
        return result;
    }
};

 

Tips收获

1.红黑树是平衡的二叉查找树,自平衡二叉查找树。

2.map vs unordered_map:

map内部实现了一个红黑树,所有元素都是有序的

unordered_map内部实现一个哈希表,元素是杂乱无序的

3.map<int,int>m,第一个int是key的数据类型,第二个int是value的数据类型,m是这个map的名称,通过key来找value的大小,在本题中,key是nums,value是map下标。

4.map.find() vs map[]

map的下标运算符[]的作用是:将关键码作为下标去执行查找,并返回对应的值;如果不存在这个关键码,就将一个具有该关键码和值类型的默认值的项插入这个map。

map的find函数:用关键码执行查找,找到了返回该位置的迭代器;如果不存在这个关键码,就返回尾迭代器,即map.end()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值