此题HashSet和HashMap都可以,代码如下:
public int[] twoSum(int[] nums, int target) {
if (nums == null) {
return new int[]{};
}
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
Integer existIndex = map.get(nums[i]);
if (existIndex != null) {
if (target == 2 * nums[i]) {
return new int[]{existIndex, i};
}
} else {
map.put(nums[i], i);
}
}
for (Map.Entry<Integer, Integer> keyValue : map.entrySet()) {
Integer key = map.get(target - keyValue.getKey());
if (key != null && !key.equals(keyValue.getValue())) {
return new int[]{keyValue.getValue(), key};
}
}
return new int[]{};
}
if (nums == null) {
return new int[]{};
}
int[] ret = new int[2];
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
int value = nums[i];
if (set.contains(value) && target == value << 1) {
ret[1] = i;
for (int j = 0; j < i; j++) {
if (nums[j] == value) {
ret[0] = j;
}
}
return ret;
}
set.add(value);
}
int index = 0;
for (int i = 0; i < nums.length; i++) {
int value = nums[i];
int targetValue = target - value;
if (set.contains(targetValue) && value != targetValue) {
ret[index++] = i;
}
}
return ret;
}
展开