1. 两数之和
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
给定一个整数数列,找出其中和为特定值的那两个数。
You may assume that each input would have exactly one solution, and you may not use the same element twice.
你可以假设每个输入都只会有一种答案,同样的元素不能被重用。
示例:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
Soultion
using System;
using System.Collections.Generic;
public class Solution {
public int[] TwoSum(int[] nums, int target) {
int[] resultIndexs = new int[2];//需要先指定数量!!!
if(nums.Length == 0){
return resultIndexs;
}
Dictionary<int, List<int>> numsDictionary = new Dictionary<int, List<int>>();
int length = nums.Length;
for(int i = 0; i < length; i++){
if(!numsDictionary.ContainsKey(nums[i])){//如果不存在该元素
numsDictionary.Add(nums[i],new List<int>());
}
numsDictionary[nums[i]].Add(i);
}
//开始查找是否有两数的和
foreach(var tempNumber in numsDictionary.Keys){//注意>>Keys<<
//if(tempNumber > target) continue; 题目的前提是都存在!!!而且正负数都有可能出现,不能惯性思维
int leftNumber = target - tempNumber;
if(leftNumber != tempNumber){//如果两个数不相等
if(numsDictionary.ContainsKey(leftNumber)){//注意>>ContainsKey<<
resultIndexs[0] = numsDictionary[tempNumber][0];
resultIndexs[1] = numsDictionary[leftNumber][0];
return resultIndexs;
}
}
else{//如果两个数相等
if(numsDictionary[tempNumber].Count >= 2){
resultIndexs[0] = numsDictionary[tempNumber][0];
resultIndexs[1] = numsDictionary[tempNumber][1];
return resultIndexs;
}
}
}
return resultIndexs;
}
}