两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
Map<Integer, Integer> map = new HashMap();
for(int i=0;i<nums.length;++i){
if(map.containsKey(target - nums[i])){
result[0] = map.get(target-nums[i]);
result[1] = i;
return result;
}
map.put(nums[i], i);
}
return result;
}
}
## 三数之和
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
Map<Integer, Integer> map = new HashMap();
for(int i=0;i<nums.length;++i){
map.put(-1*nums[i], i);
}
List<List<Integer>> result = new ArrayList();
for(int i=0;i<nums.length;++i){
for(int j=i+1;j<nums.length;++j){
if(map.containsKey(nums[j]+nums[i]) && map.get(nums[j]+nums[i])>j){
List<Integer> temp = new ArrayList();
temp.add(nums[i]);
temp.add(nums[j]);
temp.add(-1*(nums[j]+nums[i]));
if(result.contains(temp)){
continue;
}
result.add(temp);
}
}
}
return result;
}
}
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList();
if(nums == null || nums.length < 3){
return result;
}
Arrays.sort(nums);
for(int i=1;i<nums.length-1;++i){
int l = 0, r = nums.length-1;
while(l < i && r > i){
if(nums[l]>0 || nums[l] + nums[i] > 0)break;
int sum = nums[l]+nums[i]+nums[r];
if(sum == 0){
List<Integer> temp = Arrays.asList(nums[l], nums[i], nums[r]);
if(!result.contains(temp)){
result.add(temp);
}
while(nums[l] == nums[l+1] && l+1 < i)++l;
while(nums[r] == nums[r-1] && r-1 > i)--r;
++l;
--r;
}else if(sum>0){
--r;
} else{
++l;
}
}
}
return result;
}
}