41.和为s的两个数字VS和为s的连续正数序列

bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2)

{

bool found = false;

if (length < 1 || num1 == NULL || num2 == NULL)

return found;

int ahead = length - 1;

int behind = 0;

while (ahead > behind)

{

long long curSum = data[ahead] + data[behind];

if (curSum == sum)

{

*num1 = data[behind];

*num2 = data[ahead];

found = true;

break;

}

else if (curSum > sum)

ahead--;

else

behind++;

}

return found;

}

时间复杂度为O(n).

void FindContinuousSequence(int sum)

{

if (sum < 3)

return;

int small = 1;

int big = 2;

int middle = (1 + sum) / 2;

int curSum = small + big;

while (sum<middle)

{

if (curSum == sum)

PrintContinuousSequence(small, big);

while (curSum > sum&&small < middle)

{

curSum -= small;

small++;

if (curSum == sum)

PrintContinuousSequence(small, big);

}

big++;

curSum += big;

}

}

void PrintContinuousSequence(int small,int big)

{

for (int i = small; i <= big; ++i)

printf("%d",i);

printf("\n");

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 23:12:33

41.和为s的两个数字VS和为s的连续正数序列的相关文章

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列 Leetcode T1 Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the s

剑指Offer面试题41(Java版):和为s的两个数字VS和为s的连续正数序列

题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多个数字的和等于s,输出任意一对即可. 例如输入数组{1,2,4,7,11,15}和数字15.由于4+11=15,因此输出4和11. 在面试的时候,很重要的一点是应聘者要表现出很快的反应能力.只要想到一个办法,应聘者就可以立马告诉面试官,即使这个办法不一定是最好的.比如这个问题,很多人会立即能想到O(n2)的方法,也就是先在数组中固定一个数字,再依次判断数组中其余n-1个数字与它的和是不是等于s.面试官会

和为S的两个数字VS和为S的连续正数序列

题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 思路:最初我们找到数组的第一个数字和最后一个数字.首先定义两个指针,第一个指针指向数组的第一个(也就是最小的)数字,第二个指针指向数组的最后一个(也就是最大的)数字.当两个数字的和大于输入的数字时,把较大的数字往前移动:当两个数字的和小于数字时,把较小的数字往后移动:当相等时,打完收工.这样扫描的顺序是从数组的两端向数组的中间扫描. #include "stdafx.

和为s的两个数字与和为s的连续正数序列

题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 分析:选择数组的两端,将其相加,然后与s比较,如果比s大,则将指向数组最后的向前移一位,如果小于s,则指向数组的第一位的向后移一位,然后继续这个过程.如果等于s,则输出这两个数. 实现: bool FindNumbersWithSum(int data[],int length,int sum,int* num1,int* num2) {     bool fou

递增数列中和为s的两个数字,和为s的连续正数序列

1 和为s的两个数,利用begin,end两个位置标志和为s前后两个元素,当和大于s,end前移,和小于s,begin后移 vector<int> FindNumbersWithSum(vector<int> array,int sum) { 2 vector<int>res; 3 if(array.size()==0) 4 return res; 5 bool found=false; 6 int cursum=0; 7 int begin=0; 8 int end=

和为S的连续正数序列(剑指offer) 两个个指针的应用

和为S的连续正数序列 参与人数:1005时间限制:1秒空间限制:32768K 通过比例:26.06% 最佳记录:0 ms|0K(来自  平方宁) 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

41和为S的连续正数序列

题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 类似于上一题的夹逼 1 import ja

牛客(41)和为S的连续正数序列

// 题目描述 // 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100. // 但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数). // 没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你, // 你能不能也很快的找出所有和为S的连续正数序列? Good Luck! // 输出描述: // 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的

41、和为S的连续正数序列

一.题目 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 二.解法 1 import java.util.ArrayList; 2 public class Solution { 3 public Ar