public class E57NumbersWithSum {
//和为s的数字
/*问题一:在递增数组中寻找和为s的两个数字*/
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++;
}
}
/*问题二:打印出所有和为s的连续正数序列*/
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); // 4,11
E57NumbersWithSum.findSequence(15); // 1-5 4-6 7-8
}
}
和为s的数字(Java实现)
最新推荐文章于 2020-07-25 16:53:44 发布