题目描述
给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得他们的和恰好为M,输出所有满足条件的方案。
解题思路:令下标i的值初值为i,下标j的值为n-1
(1)如果满足a[i]+a[j]==M,说明找到了一组方案。由于序列递增,不等式a[i+1]+a[j]>M或者a[i]+a[j-1]<M均成立,但是对于a[i+1]+a[j-1]与M的大小未知,所以只能在[i+1,j-1]区间内继续产生,所以i++,j–.
(2)如果满足a[i]+a[j]<M,那么a[i]+a[j-1]<M是成立的,但是a[i+1]+a[j]与M的大小无法确定,需要在[i+1,j]区间内产生,所以i++
(3)如果满足a[i]+a[j]>M,那么a[i+1]+a[j]>M是成立的,但是a[i]+a[j+1]与M的大小无法确定,需要在[i,j-1]区间内产生,所以j–.
题解核心代码
void solve()
{
while(i<j)
{
if(a[i]+a[j]==M)
{
printf("%d %d\n",i,j);
i++;
j++;
}
else if(a[i]+a[j]<M)
{
i++;
}
else
{
j++;
}
}
}
给定递增正整数序列和目标和M,寻找序列中两数之和等于M的所有组合。通过双指针技巧,初始设置i=i, j=n-1,根据a[i]+a[j]与M的比较结果更新i或j,找到所有满足条件的方案。"
107297112,8746737,2020低压电工考试复习资料与模拟试题,"['电工考证', '低压电工', '培训资料', '安全规程']

494

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



