一 无序或者有序数组都行
首先你能想到用两重for暴力解题,但是我们得用map来,时间复杂度会降低一点:
数组有序无序都可以:
public class leetcode10 {
public static void main(String[] args) {
int[] array=new int[]{4,2,3,1,5,6};
System.out.println(Arrays.toString(solution(array,10)));
}
//这里的map用的真是秒
public static int[] solution(int[] array,int target){
Map<Integer,Integer> map=new HashMap<Integer, Integer>();
for (int i = 0; i < array.length; i++) {
if (map.containsKey(target-array[i])){
return new int[]{map.get(target-array[i]),i};
}
map.put(array[i],i);
}
return new int[0];
}
}
二 有序数组
如果是有序数组的话,那么可以用二分法或者双指针算法:
//双指针
public int[] twoSum(int[] numbers, int target) {
int low=0;
int high=numbers.length-1;
int sum=0;
while (low<high){
if (numbers[low]+numbers[high]>target){
high--;
}else if (numbers[low]+numbers[high]<target){
low++;
}else {
return new int[]{low+1,high+1};
}
}
return null;
}