题目传送门
方法一:暴力解法。双循环
方法二:双指针(推荐)
1.定义一个顺序表,定义左右双指针
2.while循环。判断array[left] + array[right] 的值。
3.若等于则将这两个值加入数组。并break
4.若大于则right--
5.若小于则left++。
6.最后return arr;
java
import java.util.*;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
ArrayList<Integer> arr = new ArrayList<>();
int left = 0; int right = array.length-1;
while(left < right){
if(array[left] + array[right] == sum){
arr.add(array[left]);
arr.add(array[right]);
break;
}
if(array[left] + array[right] > sum){
right--;
}else{
left++;
}
}
return arr;
}
}
复杂度分析:
方法三:哈希表
1.定义一个arr数组用来返回。定义一个HashMap用来判断和是否为sum
2.定义一个for循环并遍历array数组。在哈希表中找sum - array[i] 的值。若是没找到则加入哈希表。若是找到了。则将这个值和 array[i] 添加到数组中。
3.返回return
java
import java.util.*;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> arr = new ArrayList<Integer>();
//创建哈希表,两元组分别表示值、下标
HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
//在哈希表中查找target-numbers[i]
for(int i = 0; i < array.length; i++){
int temp = sum - array[i];
//若是没找到,将此信息计入哈希表
if(!mp.containsKey(temp)){
mp.put(array[i], i);
}
else{
//取出数字添加
arr.add(temp);
arr.add(array[i]);
break;
}
}
return arr;
}
}