【面试题41】和为s的两个数字VS和为s的连续整数序列

【题目描述】

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s。如果有多对数字的和等于s,输出任意一队即可。

【解决方案】

设置前后指针,根据所指数字的和来移动前后指针,直到找到目标数字。

我的代码实现,仅供参考:

 1         public static bool FindNumsWithSum(int[] arr, int sum, ref int numA, ref int numB)
 2         {
 3             if (arr == null || arr.Length < 1)
 4                 return false;
 5 
 6             int start = 0;
 7             int end = arr.Length - 1;
 8             int temp = 0;
 9 
10             while (arr[start] + arr[end] != sum && start < end)
11             {
12                 temp = arr[start] + arr[end];
13 
14                 if (temp > sum)
15                     end--;
16                 else
17                     start++;
18             }
19 
20             if (start == end)
21                 return false;
22             else
23             {
24                 numA = arr[start];
25                 numB = arr[end];
26             }
27 
28             return true;
29         }

【本题扩展】

输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。

例如数组15,由于1+2+3+4+5=4+5++6=7+8=15,所以结果打印出3个连续序列1~5,4~6和7~8。

时间有限,只提供代码。

我的代码实现,仅供参考:

 1         public static void FindContinuousSequence(int sum)
 2         {
 3             int start = 1;
 4             int end = 2;
 5             int curSum = start + end;
 6 
 7             while (start < (sum + 1) / 2)
 8             {
 9                 if (curSum < sum)
10                 {
11                     end++;
12                     curSum += end;
13                 }
14                 else if (curSum > sum)
15                 {
16                     curSum -= start;
17                     start++;
18                 }
19                 else
20                 {
21                     for (int i = start; i <= end; i++)
22                     {
23                         Console.Write(i);
24                     }
25                     Console.WriteLine();
26 
27                     curSum -= start;
28                     start++;
29                 }
30             }
31         }
原文地址:https://www.cnblogs.com/HuoAA/p/4833618.html