解决两数之和?(Javascript, Java, C#, Swift, Kotlin, Python,C++,?Golang)
给定一个整数数组,返回两个数字的索引,以便它们加起来成为一个特定的目标。
您可以假定每个输入都只有一个解决方案,并且您可能不会两次使用同一元素。
举例:
给定数组?=[2, 7, 11, 15],?目标值?= 9,
因为nums[0]+ nums[1] = 2 + 7 = 9,
所以返回?[0,1].
思路:
我们定义一个字典来存储元素及其索引。
我们将一一检查元素。
?假设当前元素是a;
?我们将元素及其索引存储到字典中;
?并使用目标减去当前元素来获得差值b;
?我们检查映射是否可以使用b作为键来获取任何内容,如果该值不为空并且其索引也不相同,则得到答案。
Javascript:
twoSum =(nums, target)=> {
??? let map = newMap;
??? for(let i = 0; i< nums.length; i ++) {
???????let a = nums[i];
???????let b = target - a;
???????let j = map.get(b);
???????if(j !== undefined) {
?????????if(j !== i){
????????????return [i, j ];
?????????}
???????}
???????map.set(a, i);
??? }
??? return [];
}
console.log(twoSum([2,7,11,15],9))
console.log(twoSum([3,2,4],6))
console.log(twoSum([3,3],6))
Java:
importjava.util.*;
public classHelloWorld{
???? publicstatic void main(String []args){
???????System.out.println(Arrays.toString(twoSum(newint[]{2,7,11,15}, 9)));
???????System.out.println(Arrays.toString(twoSum(newint[]{3,2,4}, 6)));
???????????????????????System.out.println(Arrays.toString(twoSum(newint[]{3,3}, 6)));
???? }
????????????public static int[] twoSum(int[] nums, inttarget) {
???????????????????????Map<Integer,Integer> map = new HashMap<Integer, Integer>();
???????????????????????for(int i = 0 ; i<nums.length; i++){
????????????????????????????????????????????????int a = nums[i];
????????????????????????????????????????????????int b = target - a;
????????????????????????????????????????????????Integer j = map.get(b);
???????????????????????????????????????????????map.put(a, i);
????????????????????????????????????????????????if(j != null && i != j) {
????????????????????????????????????????????????????????????return new int[]{i,j};
????????????????????????????????????????????????}
???????????????????????}
???????????????????????return new int[]{};
??? }
}
c#:
usingSystem;
usingSystem.Collections.Generic;
classHelloWorld {
??? public staticvoid Main(string[] args)
??? {
???????Console.WriteLine(string.Join(",",twoSum(newint[]{2,7,11,15}, 9)));
???????Console.WriteLine(string.Join(",",twoSum(new int[]{3,2,4},6)));
???????Console.WriteLine(string.Join(",",twoSum(new int[]{3,3},6)));
??? }
??? public staticint[] twoSum(int[] nums, inttarget) {
??????????? Dictionary<int,int> map= new Dictionary<int, int>();
??????????? for(inti = 0 ; i<nums.Length; i++) {
????????????????????????int a = nums[i];
????????????????????????int b = target - a;
????????????if(map.ContainsKey(b)) {
????????????????int j = map[b];
????????????????if(i != j) {
????????????????????return new int[]{i,j};
????????????????}????????????????????
????????????}
????????????map[a] = i;
??????????? }
??????????? returnnew int[]{};
??? }
}
Swift:
importFoundation
functwoSum(_ nums: [Int], _ target:Int) -> [Int] {
??? var map = [Int :Int]()
??? for (i, a) innums.enumerated() {
???????var b = target - a;
???????var j = map[b]
???????if(j != nil) {
???????????var jj = j!
???????????return [i,jj]
???????}
???????map[a] = i
??? }
??? return []
}
print(twoSum([2,7,11,15],9))
print(twoSum([3,2,4],6))
print(twoSum([3,3],6))
Kotlin:
funtwoSum(nums: IntArray, target:Int): IntArray {
??? valmap:HashMap<Int,Int> =HashMap<Int,Int>()
??? for ((i, a) innums.withIndex()) {
??????????? varb = target - a
???????var j = map.get(b)
???????if(j != null) {
???????????var jj = j!!
???????????if(jj != i){
???????????????return intArrayOf(i, j)
???????????}
???????}
???????map.set(a, i)
???????????}
??? returnintArrayOf()
}
fun main() {
???println(twoSum(intArrayOf(2,7,11,15),9).joinToString(","))
??? println(twoSum(intArrayOf(3,2,4),6).joinToString(","))
???println(twoSum(intArrayOf(3,3),6).joinToString(","))
}
Python:
deftwoSum(nums, target):
??? map = {}
??? i = 0
??? l = len(nums)
??? while i < l:
???????a = nums[i]
???????b = target - a
???????j = map.get(b)
???????if j is not None:
???????????if j != i:
???????????????return [i,j]
???????map[a] = i
???????i += 1
??? return[]???
print(twoSum([2,7,11,15],9))
print(twoSum([3,2,4],6))
print(twoSum([3,3],6))
C++:
#include<iostream>
#include<vector>
#include<map>
usingnamespace std;
vector<int>twoSum(vector<int>&nums, int target) {
??? std:map<int,int> map;
??? vector<int>ret;
??? for(int i = 0; i< nums.size(); i ++) {
???????int a = nums[i];
???????int b = target - a;
???????std::map<int,int>::iterator it =map.find(b);
???????if(it != map.end()) {
???????????int j = it->second;
???????????if(j != i) {
???????????????ret.push_back(i);
???????????????ret.push_back(j);
??????????????return ret;
???????????}
???????}
???????map.insert(std::pair<int, int>(a,i));
??? }
??? return ret;
}
int main()
{
??? {
???????std::vector<int> nums;
???????nums.push_back(2);
???????nums.push_back(7);
???????nums.push_back(11);
???????nums.push_back(15);
???????std::vector<int> ret =twoSum(nums, 9);
???????for (std::vector<int>::iteratorit = ret.begin() ; it != ret.end(); ++it){
???????????std::cout << *it <<',';
???????}
???????std::cout << '\n';
??? }
??? {
???????std::vector<int> nums;
???????nums.push_back(3);
???????nums.push_back(2);
???????nums.push_back(4);
???????std::vector<int> ret =twoSum(nums, 6);
???????for (std::vector<int>::iteratorit = ret.begin() ; it != ret.end(); ++it){
???????????std::cout << *it <<',';
???????}
???????std::cout << '\n';
??? }
??? {
???????std::vector<int> nums;
???????nums.push_back(3);
???????nums.push_back(3);
???????std::vector<int> ret =twoSum(nums, 6);
???????for (std::vector<int>::iteratorit = ret.begin() ; it != ret.end(); ++it){
???????????std::cout << *it <<',';
???????}
???????std::cout << '\n';
??? }
??? return 0;
}
Golang:
package main
import (
???????????"fmt"
)
functwoSum(nums []int, target int)[]int {
???????var mapCheck = make(map[int]int)
???????var a int
???????var b int
???????????for i:=0; i < len(nums) ; i ++ {
???????????????????????a = nums[i]
???????????????????????b = target - a
???????????????????????if j, ok := mapCheck[b]; ok {
???????????????????????????????????if( j != i){
???????????????????????????????????????????????return[]int{i,j}
???????????????????????????????????}
???????????????????????}
???????????????????????mapCheck [a] = i
???????????}
???????????return []int{}
}
func main(){
???????????fmt.Println(twoSum([]int{2,7,11,15},9))
???????????fmt.Println(twoSum([]int{3,2,4}, 6))
???????????fmt.Println(twoSum([]int{3,3}, 6))
}