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日