Problem
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, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
Code
public class Solution {
public int[] twoSum(int[] nums, int target) {
int origins[] = Arrays.copyOf(nums, nums.length);
Arrays.sort(nums);
int left = 0, right = nums.length - 1;
while (nums[left] + nums[right] != target) {
if (nums[left] + nums[right] < target) {
left++;
} else {
right--;
}
}
int ret[] = new int[]{-1, -1};
for (int i = 0; i < origins.length; ++i) {
if (origins[i] == nums[left] && ret[0] == -1) {
ret[0] = i;
continue;
}
if (origins[i] == nums[right]) {
ret[1] = i;
}
}
return ret;
}
}