思路一:双指针
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
int start=0;
int end=array.length-1;
ArrayList list = new ArrayList();
if(array==null||array.length==0)
return list;
while(start<end)
{
if((array[start]+array[end])==sum)
{
list.add(array[start]);
list.add(array[end]);
break;
}
else if((array[start]+array[end])>sum)
end--;
else
start++;
}
return list;
}
}
时间O(N)空间 常数级
即【sum-array[start]==array[end] 】
思路二:暴力破解,双循环
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList list = new ArrayList();
if(array==null||array.length==0)
return list;
int x=1000;int y=1000;
for(int i=0;i<array.length;i++)
{
for(int j=i+1;j<array.length;j++)
{
if(array[i]+array[j]==sum)
{
if(x*y>array[i]*array[j])
{
x=array[i];
y=array[j];
}
}
}
}
if(x!=1000&&y!=1000)
{
list.add(x);
list.add(y);
}
return list;
}
}
时间O(N^2) 空间常数级
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList list = new ArrayList();
if(array==null||array.length==0)
return list;
int x=Integer.MAX_VALUE;int y=Integer.MAX_VALUE;//溢出
for(int i=0;i<array.length;i++)
{
for(int j=i+1;j<array.length;j++)
{
if(array[i]+array[j]==sum)
{
if(x*y>array[i]*array[j])
{
x=array[i];
y=array[j];
}
}
}
}
if(x!=Integer.MAX_VALUE&&y!=Integer.MAX_VALUE)
{
list.add(x);
list.add(y);
}
return list;
}
}
思路三:哈希表法?