寫了三個版本的,第一個版本是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