- 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