- 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