public class E57NumbersWithSum {
public static void findTwoNumbers(int[] numbers, int s){
if (numbers == null || numbers.length < 2)
return;
int start = 0;
int end = numbers.length - 1;
while(start < end){
long sum = numbers[start] + numbers[end];
if (sum == s){
System.out.println(numbers[start] + "," + numbers[end]);
return;
}
else if (sum > s)
end--;
else
start++;
}
}
public static void findSequence(int s){
if (s < 3)
return;
int pre = 1;
int behind = 2;
int middle = (1 + s) >> 1;
int sum = 3;
while(pre < middle){
if (sum == s){
printSequence(pre, behind);
}
while(sum > s && pre < middle){
sum -= pre;
pre++;
if (sum == s){
printSequence(pre, behind);
}
}
behind++;
sum += behind;
}
}
private static void printSequence(int pre, int behind) {
if (pre <= 0 || behind <= 0 || pre > behind)
return;
System.out.print("[");
for (int i = pre; i < behind; i++){
System.out.printf("%d,", i);
}
System.out.print(behind + "]\n");
}
public static void main(String[] args){
int[] numbers1 = {1, 2, 4, 7 ,11, 15};
E57NumbersWithSum.findTwoNumbers(numbers1, 15);
E57NumbersWithSum.findSequence(15);
}
}