题目1:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S,如果有多对,输出任意一对即可。
题目2:
输入一个整数s,打印出所有和为s的连续整数序列。(至少两个数)
实现
public class Solution41 {
public static void findNums1(
int[] nums,
int s){
if(nums==
null || nums.length<
2){
return;
}
Map<Integer,Integer> dic =
new HashMap<Integer,Integer>();
for(
int i=
0;i<nums.length;i++){
if(dic.containsKey(nums[i])){
dic.put(nums[i],
2);
}
else{
dic.put(nums[i],
1);
}
}
for(
int i=
0;i<nums.length;i++){
int diff = s-nums[i];
if(dic.containsKey(diff)){
if(diff==nums[i]){
if(dic.
get(diff)==
2){
System.
out.printf(
"满足要求的数:%d,%d",diff,nums[i]);
}
}
else{
System.
out.printf(
"满足要求的数:%d,%d",diff,nums[i]);
}
}
}
}
public static void findNums2(
int[] nums,
int s){
if(nums==
null || nums.length<
2){
return;
}
int start=
0;
int end=nums.length-
1;
while (start<end){
int sum = nums[start]+nums[end];
if(sum==s){
System.
out.printf(
"满足要求的数:%d,%d",nums[start],nums[end]);
return;
}
else if(sum>s){
end--;
}
else {
start++;
}
}
System.
out.printf(
"没有满足要求的数");
}
public static void findContinuousSequence(
int sum){
if(sum<
3){
return;
}
int small =
1;
int big=
2;
int cur_sum = small+big;
int middle = (
1+sum)/
2;
while (small<middle){
if(cur_sum==sum){
printNums(small,big);
}
while (cur_sum>sum && small<middle){
cur_sum-=small;
small++;
if(cur_sum==sum){
printNums(small,big);
}
}
big++;
cur_sum+=big;
}
}
public static void printNums(
int start,
int end){
for(
int i=start;i<=end;i++){
System.
out.format(
" %d",i);
}
System.
out.println();
}
public static void main(String[] args){
findContinuousSequence(
15);
}
}