zoukankan      html  css  js  c++  java
  • 【面试题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         }
  • 相关阅读:
    DLL编写教程
    Ogre 配置
    LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    C++编译,链接错误总结
    git基本操作
    实习第33天
    HTTP状态码整理
    Window下的WebStorm快捷键操作
    告别div,可以代替div的几个标签
    实习20天
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4833618.html
Copyright © 2011-2022 走看看