public int[] twoSum(int[] nums, int target) {
int[] arr = new int[2];
for (int i = 0; i < nums.length; i++){
for (int j = i + 1; j < nums.length; j++){
if (nums[i] + nums[j] == target){
arr[0] = i;
arr[1] = j;
return arr;
}
}
}
return arr;
}
下面是2ms 的范例, 解析一波
开一个超出题目所包含的数据的数组。然后暴力求解,显然在测试数据比较水的时候可以过但是是比较受限制的。
作者应该是去测试过题目给出的数据的范围。
而我在下面的自己建数据下居然也得出了答案(是无解的),证明下面2ms的代码确实是错的
int[] nums = {1, 4094};
target = 2147483647
class Solution {
int size = 4096;
int[] map = new int[size];
int length = 4095;
int index;
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
index = nums[i]&length;
if (map[index] != 0) {
return new int[] { map[index] - 1, i };
} else {
map[(target - index)&length ] = i + 1;
}
}
throw new IllegalArgumentException("No two sum solution");
}
}
//下面是5ms 的范例, 用的map, 用map优化以后效率显著提高, 毕竟map的查找效率比我的快了不是一点点
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> mymap = new HashMap<>();
for(int i =0;i<nums.length;i++){
int temp = target - nums[i];
if(mymap.containsKey(temp)){ //服了 大小写k不分
return new int[]{i,mymap.get(temp)};
}
mymap.put(nums[i],i);
}
// system.out.println("No two sum solution"); 没有包含相应的包
throw new IllegalArgumentException("No such solution");
}
}