You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组平方升序排序函数输出缺失首个元素问题求助

问题修复:数组平方排序后首个元素缺失

你的代码核心问题出在双指针循环的条件上:

原代码中while(leftPtr < rightPtr)的条件会导致当左右指针相遇(leftPtr == rightPtr)时,循环直接终止,此时这个位置的元素还没有被处理,所以结果数组会少一个元素——也就是输入数组中绝对值最小的元素的平方(比如示例中的1²=1)。

修复方案

只需要把循环条件从leftPtr < rightPtr改成leftPtr <= rightPtr,这样当指针相遇时,还会执行一次循环体,把最后一个元素的平方加入结果数组。

修复后的完整代码

#include <bits/stdc++.h>
#include<vector>
using namespace std;

void sortedSquaredArray(vector<int> &v){

    vector<int> ans;

    int leftPtr = 0;
    int rightPtr = v.size()-1;
    // 修改循环条件为 <=
    while(leftPtr <= rightPtr){
        if(abs(v[leftPtr]) < abs(v[rightPtr])){
            ans.push_back(v[rightPtr] * v[rightPtr]);
            rightPtr--;
        }
        else{
            ans.push_back(v[leftPtr] * v[leftPtr]);
            leftPtr++;
        }
    }

    reverse(ans.begin(),ans.end());

    cout<<"Sorted Squared Array: [ ";
    for(int i=0; i<ans.size(); i++){
        cout<<ans[i]<<" ";
    }
    cout<<"]"<<endl;

}

int main(){

    // Given an integer array 'a' sorted in non-decreasing order, return an array of squares of each number sorted in non-decreasing order

    int n; cin>>n;

    vector<int> v;

    for(int i=0; i<n; i++){
        int ele; cin>>ele;
        v.push_back(ele);
    }

    sortedSquaredArray(v);
    
    return 0;
}

验证效果

输入5和数组1 2 3 4 5,输出会变为:Sorted Squared Array: [ 1 4 9 16 25 ],所有元素都被正确处理。

内容的提问来源于stack exchange,提问作者Shresth Gour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:45:29