算法1
(快排思想)
先将数组排序,然后,数组最左端指针left,最右端指针right,若两个相加大于目标值,则right–,若小于,left++
java 代码
class Solution {
public int[] findNumbersWithSum(int[] arr, int k) {
if(arr.length==0||arr==null)
return null;
int left = 0;
int len = arr.length;
int right = len-1;
Arrays.sort(arr);
while(left<right){
if(arr[left]+arr[right]<k){
left++;
}else if(arr[left]+arr[right]>k){
right--;
}else{
return new int[]{arr[left],arr[right]};
}
}
return null;
}
}
算法2
(哈希表)
将数组元素放进hashset去然后遍历数组,如果和减去当前的值,得到的数值在hashset中,则输出
Java 代码
class Solution {
public int[] findNumbersWithSum(int[] arr, int k) {
if(arr.length==0||arr==null)
return null;
int len = arr.length;
Set<Integer> set = new HashSet<>();
for(int i = 0; i < len;i++){
set.add(arr[i]);
}
for(int i = 0; i < len;i++){
int l = k - arr[i];
if(set.contains(l)){
return new int[]{arr[i],l};
}
}
return null;
}
}