面试题41和为S的两个数字VS和为s的连续正数序列

本文介绍了一种高效的方法来解决在一个递增排序的数组中查找两个数使它们的和正好等于给定数字s的问题。通过使用双指针技巧,可以快速定位满足条件的数字对,同时提供了函数接口和示例代码来实现这一算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

思路:最简单的办法逐个遍历数组中数,每遍历一个数时将该数与后面的数相加判断是否和为s

好的点方法:设立两个指针,第一个指向第一个数字,第二个指针指向最后一个,和==sum的跳出循环,cursum 小于sum的第一个指针后移,否则最后一个指针前移

i=0,j=length-1   whilei<j{}

函数接口: boolFindNumbersWithSum(int data[],int length,int sum,int*num1,int*num2)

类似题目输入一个正整数s 打印出所有和为s的连续正整数(至少含有两个数)

思路穷举法:1s 之间的所有连续整数相加判断即可

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值