写了三个版本的,第一个版本是javascript使用两个循环,最不烧脑的方法,后面是看答案写出来的,不过也是理解之后,本身写的,挺不错的,能够换种思路解决问题。javascript
javajava
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0;i < nums.length;i++){
map.put(nums[i],i);
}
for(int i =0;i < nums.length;i++){
int num2 = target - nums[i];
if(map.containsKey(num2) && map.get(num2) != i){
return new int []{i,map.get(num2)};
}
}
throw new IllegalArgumentException("没有找到该数组");
}算法
总结:该方法为LeetCode给出的答案,我太笨了,根本想不到使用map来作这道题,看到答案后简直了,哈哈,我太菜了,什么都不会,map.get(num2) != i 是用来防止使用同一个数数组
C#ip
public class Solution {
public int[] TwoSum(int[] nums, int target) {
var map = new Dictionary<int,int>();
for(var i = 0;i < nums.Length;i++){get
// 步骤1
if(map.ContainsKey(target - nums[i])){
return new int [] {i,map[target - nums[i]]};
}
//步骤2
if(!map.ContainsKey(nums[i])){
map.Add(nums[i],i);
}
}
return null;
}
}博客
总结:io
1.C#中字典中的key不能够重复,因此须要进行判断,当key不存在是,向字典中添加数据。function
2.步骤1与步骤2调换顺序会引发错误,错误愿意是:当数组为[3,3]时,下标为0的添加进字典中,步骤2会为true,return i=0,key=0,题目不容许使用同一个数。class
3.网上找的,而后简单修改的,忘记那个博客看到了的,很差意思啊,哈哈哈
javascript
var twoSum = function(nums, target) {
for(var i = 0;i < nums.length;i++){
for(var j = i + 1;j < nums.length;j++){
if(nums[i] + nums[j] == target){
return [i,j];
}
}
}
};
总结:这个是我本身写的,哈哈哈,也是最简单的,根本估计算法让我写成这样,也是丢脸了,不过没舍得改,也算是处理了问题的一种方法,时间复杂度n2