面试题41输入一个递增排序的数组和一个数字s,在数组中查找两个数使它们的和正好是s如果有多对数字的和等于s输出任意一对即可。
思路:最简单的办法逐个遍历数组中数,每遍历一个数时将该数与后面的数相加判断是否和为s;
好的点方法:设立两个指针,第一个指向第一个数字,第二个指针指向最后一个,和==sum的跳出循环,cursum 小于sum的第一个指针后移,否则最后一个指针前移
i=0,j=length-1 while(i<j){}
函数接口: boolFindNumbersWithSum(int data[],int length,int sum,int*num1,int*num2)
类似题目输入一个正整数s 打印出所有和为s的连续正整数(至少含有两个数)
思路: 穷举法:1到s 之间的所有连续整数相加判断即可
intmiddle=(sum+1)/2;
for(inti=1;i<=middle;i++)
{
intstart=i,end=i;
intcursum=0;
while(end<=middle)
函数接口:voidFindContinuousSequence(int sum);
Void PrintContinousSequence(int start,int end);
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
void FindContinuousSequence(int sum)
{
if(sum<3)
{
return ;
}
int middle=(sum+1)/2;
for(int i=1;i<=middle;i++)
{
int start=i,end=i;
int cursum=0;
while(end<=middle)
{
cursum+=end;
if(cursum==sum)
{
for(int j=start;j<end;j++)
{
cout<<j<<'+';
}
cout<<end<<endl;
break;
}
end++;
}
}
}
int main()
{
FindContinuousSequence(15);
return 0;
}
本文介绍了一种高效的方法来解决在一个递增排序的数组中查找两个数使它们的和正好等于给定数字s的问题。通过使用双指针技巧,可以快速定位满足条件的数字对,同时提供了函数接口和示例代码来实现这一算法。

被折叠的 条评论
为什么被折叠?



