NC61两数之和(哈希法)

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f?tpId=117&&tqId=34983&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking

- 1、题目描述:
图片说明

- 2、题目链接:

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f?tpId=117&&tqId=34983&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking
-3、 设计思想:
图片说明
详细操作流程看下图:
图片说明
-4、视频讲解链接B站视频讲解

-5、代码:
c++版本:

 class Solution {
public:
    /**
     * 
     * @param numbers int整型vector 
     * @param target int整型 
     * @return int整型vector
     */
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int>res;//保存结果
        map<int,int>mp;//定义一个哈希表存储numbers[i]和对应的下标
        for (int i = 0; i < numbers.size(); i ++) {//进行标记
            mp[numbers[i]] = i;
        }
         for (int i = 0; i < numbers.size(); i++) {
             //每遍历一个numbers[i]就去对应的mp里找有没有target - numbers[i]
             //如果有就返回结果
             //如果没有就找下一个
            if(mp.find(target - numbers[i]) != mp.end() && i != mp[target - numbers[i]]){
                res.push_back(i + 1);
                res.push_back(mp[target - numbers[i]] + 1);
                return res;
            }
        }
        return res;


    }
};

Java版本:

import java.util.HashMap;
public class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int[] res = {0,0};//保存结果
        HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();//定义一个哈希表存储numbers[i]和对应的下标
        for(int i = 0;i < numbers.length;i ++){//进行标记
            mp.put(numbers[i],i);
        }
        for(int i = 0;i < numbers.length;i ++){
             //每遍历一个numbers[i]就去对应的mp里找有没有target - numbers[i]
             //如果有就返回结果
             //如果没有就找下一个
            if(mp.containsKey(target-numbers[i]) && i != mp.get(target - numbers[i])){
                res[0] = i + 1;
                res[1] = mp.get(target-numbers[i]) + 1;
                return res;
            }
        }

        return res;
    }
}

Python版本:

#
# 
# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
#
# 
# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        res = [0,0]#保存结果
        mp = {}#定义一个哈希表存储numbers[i]和对应的下标
        for i in range(len(numbers)):#进行标记
            mp[numbers[i]] = i
        for i in range(len(numbers)):
             #每遍历一个numbers[i]就去对应的mp里找有没有target - numbers[i]
             #如果有就返回结果
             #如果没有就找下一个
            if target - numbers[i] in mp:
                if mp[target - numbers[i]] != i:
                    res[0] = i + 1
                    res[1] = mp[target - numbers[i]]+1
                    return res
        return res
牛客题霸 文章被收录于专栏

本专栏主要是牛客题霸习题的讲解,有详细的考点分类,大家可以可以看看呦!!!

全部评论
如果是返回下标的话res[1]似乎不需要加1? res[0]是要加1
点赞 回复 分享
发布于 2024-10-28 19:40 广东
不懂就问,为啥要return两次
点赞 回复 分享
发布于 2021-08-26 23:03
想问下,java版本的那个i!=的条件,题目不是要求index1
点赞 回复 分享
发布于 2021-04-12 17:37
python版本res[1]要+1
点赞 回复 分享
发布于 2021-03-16 10:23
如果number[i]里有重复的值,key不就重复了吗
点赞 回复 分享
发布于 2021-03-07 21:29

相关推荐

可爱的牛油果在求佛:我觉得很不错,我通过这份简历,看到的是一个学历不错,经历也有,生活也自律的积极青年,有培养潜力
点赞 评论 收藏
分享
rndguy:哥们你这个项目看起来做的内容不少,挺厉害的啊orz,搞不好写写论文硕士都能毕业了,怎么会找不到呢?
牛客激励计划
点赞 评论 收藏
分享
评论
19
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务