N个数相加,主要采用排序加双指针的方法。
假设是两个数相加,直接采用hashMap
的方法,不需要排序,因为排序比较浪费时间
若相加的数的个数比较多,就比如三个数的时候,排序所需要的时间已经占比不大了,所以可以采用排序,数组排序好之后,可以直接使用指针控制,元素相加的位置,更容易一点。
1.两个数相加
public static int[]twoSum(int[] nums,int target){
// 创建一个Hashmap集合
Map<Integer,Integer> map = new HashMap<>();
// 遍历数组,将数组中的元素值作为key键,数组下标i作为value值存放到散列中
for (int i = 0 ; i < nums.length ; i++){
// 判断 如果散列中包括这个数的另一半,则直接将返回包含的数的下标和这个的下标
if (map.containsKey(target-nums[i])){
return new int[]{
map.get(target-nums[i]),i};
}else {
// 如果散列中没有该数据对,就添加到数据对中
map.put(nums[i],i);
}
}
// 如果没找到,就直接返回数组-1,-1
return new int[]{
-1,-1};
}
有序数组的两数之和
public int[] twoSum2(int[] nums, int target) {
if (nums.length==1){
return new int[]{
};
}
int i=0;
int j=nums.length-1;
while (i<j){
if (nums[i]+nums[j]==target){
return new int[]{
nums[i