数组平方升序排序函数输出缺失首个元素问题求助
问题修复:数组平方排序后首个元素缺失
你的代码核心问题出在双指针循环的条件上:
原代码中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
相关产品推荐
相关产品推荐

