力扣-1两数之和

前言,从今天开始每天都坚持刷一道力扣的题,一星期至少刷5道,简要整理下博客以督促自己。(等后面题难再对计划进行变更)–20.12.10


确定自己打算找开发岗,大概率也是Java开发,再重头用java刷题。–21.8.28

题目连接

请点击

解题思路(旧)

两层for循环,第一层,每次都假定当前值nums[i]就是其中的第一个加数,定义一个temp整型变量,用于存放target减去当前值剩余的值;第二层for循环,直接找余下中是等于temp的那个值

解题思路(更)

重新看了官网题解才知道还有【哈希表】这种方法,可见第一次是刷了个寂寞>_<

  • 把数组中每个元素的【值】与其位置【下标】用HashMap关联起来
  • 要注意【数组中同一个元素在答案里不能重复出现】

Java代码(测试用例52错)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        int len = nums.length;
        for(int i=0; i<len; i++){
            hashMap.put(nums[i], i);
        }
        for(int i=0;i<len;i++){
            if(hashMap.containsKey(target-nums[i])){
                return new int[]{hashMap.get(target-nums[i]), i};
            }
        }
        return new int[0];
    }
}

起初看过官网题解,仅仅是把数组的值和下标关联起来,但是发现报错了(错误原因:输出了相同的元素)
在这里插入图片描述
所以官网题解是上来直接遍历的数组,若是不存在则把值和下标放到HashMap里,这样可以保证,相同的元素不会在答案中出现两次(哎,这么简单的问题都要想想 |_| )

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        int len = nums.length;
        for(int i=0;i<len;i++){
            if(hashMap.containsKey(target-nums[i])){
                return new int[]{hashMap.get(target-nums[i]), i};
            }
            hashMap.put(nums[i], i);
        }
        return new int[0];
    }
}

C++代码(旧)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> flag(2);
        for(int i=0;i<nums.size();i++){
            flag[0]=i;
            int temp=target-nums[i];
            for(int j=i+1;j<nums.size();j++){
                if(nums[j]==temp){
                    flag[1]=j;
                    break;
                }
            }
            if(flag[1]!=0) break;
        }
        return flag;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值