题目要求:
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.
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
我的Solution:
int length = nums.length;
int[] res = {};
int lastIndex = nums.length-1;
ArrayList<Integer> result = new ArrayList<Integer>();
while(length > 0) {
int last = nums[length-1];
for(int i=0;i<length-1;i++) {
if(nums[i]+last == target) {
result.add(i);
result.add(lastIndex);
res = new int[result.size()];
for (int j=0;j<result.size();j++) {
res[j] = result.get(j);
}
return res;
}
}
lastIndex -= 1;
length -= 1;
}
return res;
跟我写的一个效率但是比我整洁的写法(反正都是暴力遍历求解,O(n2)的时间复杂度):
int length = nums.length;
int index1 = 0;
int index2 = 0;
for (int i=0;i<length;i++) {
for(int j=i+1;j<length;j++) {
if(nums[i] + nums[j] == target) {
index1 = i;
index2 = j;
}
}
}
int[] returnValue = new int[] {index1, index2};
return returnValue;
O(n)复杂度的解法(想法很好)
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int j=0;j<nums.length;j++) {
int x = nums[j];
if(map.containsKey(target-x)) {
return new int[] { map.get(target-x), j };
}
map.put(x, j);
}
throw new IllegalArgumentException("no two sum solution");
}
这就是差距啊,妈蛋,是个坑老子也要填平了!