public class TwoSum_1 {
public int[] twoSum(int[] nums, int target) {
//二分法(暂时最快)
int[] copy = Arrays.copyOf(nums, nums.length);
int[] values = new int[2];
int[] indexes = new int[2];
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
int temp = nums[i];
//分段,是为了避免出现[3,2,4] 6的情况
int index1 = Arrays.binarySearch(nums, 0, i, target - temp);
int index2 = Arrays.binarySearch(nums, i+1, nums.length, target - temp);
if(index1 > 0 || index2 > 0) {
values[0] = temp;
values[1] = target - temp;
}
}
//为了避免出现[0,4,3,0] 0 的情况
boolean ok1 = false;
boolean ok2 = false;
for (int i = 0; i < copy.length; i++) {
if(ok1 && ok2) {
break;
}
if(!ok1 && copy[i] == values[0]) {
indexes[0] = i;
ok1 = true;
}
if(!ok2 && copy[i] == values[1]){
indexes[1] = i;
}
}
Arrays.sort(indexes);
return indexes;
//直观简单的思路
// for (int i = 0; i < nums.length; i++) {
// if(i == (nums.length-1)) {
// return null;
// }
// int temp1 = nums[i];
// for(int j = i + 1; j < nums.length; j++) {
// int temp2 = nums[j];
// if(temp1 + temp2 == target) {
// int[] answers = {i, j};
// return answers;
// }
// }
// }
// return null;
}
}