pine_cone_ 2023-08-16 12:32 采纳率: 0%
浏览 9

双指针-遍历方向导致的问题

img


这是一个求数组元素目标和的算法题,复杂度要求O(n),我用了双指针来做,下面这个是AC的代码。

#include<bits/stdc++.h>
using namespace std;
const int N = 100003;
int a[N], b[N];

int main() {
    int n, m, x;
    cin >> n >> m >> x;

    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 0; i < m; i++)
        cin >> b[i];

    for (int i = 0, j = m-1; i < n; i++) {
        while (j >=0 && a[i] + b[j] > x)
            j--;
        //b从大到小遍历
        if (j >= 0 && a[i] + b[j] == x) {
            cout << i << " " << j;
            return 0;
        }
    }

下面是我将b从小到大遍历的代码,只是改动了遍历方向,且测试之后发现不会溢出,可以取到尾值,但为什么不AC呢,请大家帮忙答疑。

#include<bits/stdc++.h>
using namespace std;
const int N = 100003;
int a[N], b[N];

int main() {
    int n, m, x;
    cin >> n >> m >> x;

    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 0; i < m; i++)
        cin >> b[i];

    //b从小到大遍历
    for (int i = 0, j = 0; i < n; i++) {
        while (j < m && a[i] + b[j] < x)
            j++;

        if (j < m && a[i] + b[j] == x) {
            cout << i << " " << j;
            return 0;
        }
        j--;
    }
}


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-16 14:20
    关注

    【以下回答由 GPT 生成】

    在代码的第二段中,将b数组的遍历顺序改为从小到大时出现问题的原因是在while循环的条件中使用了错误的判断,应该是a[i] + b[j] > x,而不是a[i] + b[j] < x。这个错误导致了循环的终止条件不正确,从而导致结果不准确。

    以下是正确的代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 100003;
    int a[N], b[N];
    
    int main() {
        int n, m, x;
        cin >> n >> m >> x;
    
        for (int i = 0; i < n; i++)
            cin >> a[i];
        for (int i = 0; i < m; i++)
            cin >> b[i];
    
        // b从小到大遍历
        for (int i = 0, j = 0; i < n; i++) {
            while (j < m && a[i] + b[j] > x)
                j++;
    
            if (j < m && a[i] + b[j] == x) {
                cout << i << " " << j;
                return 0;
            }
            j--;
        }
    }
    

    这样修改后,代码就能够正确地找到数组元素之和等于目标值的索引位置了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月16日

悬赏问题

  • ¥15 安卓EVS如何开启服务正常实现功能
  • ¥15 canal读取mysql时报错
  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀