C++ 中排序数组的平方
在给定的排序整数数组中,任务是打印每个数组元素的平方,并按排序顺序打印数组。例如,
输入-1 −
arr[ ] = { -3,-1,0,1,4,6 };输出 −
{0,1,1,9,16, 36}解释 − 给定数组 [-3, -1,0,1,4,6 ] 的每个元素的平方是 [0,1,1,9,16,36 ]。
输入-2 −
arr[ ]= { 0,1,2,8,9 }输出 −
{0,1,4,64,81}解释 − 给定数组 [ 0,1,2,8,9 ] 的每个元素的平方是 [ 0,1,4,64,81 ]。
解决此问题的方法
为了解决此特定问题,我们可以使用双指针方法。在双指针中,我们使用两个指针 left 和 right。左指针初始化为数组的第一个元素,右指针指向数组的结束元素。
在遍历数组元素时,我们将找到值的平方,并检查右整数的平方是否大于或小于左整数。
输入一个按升序排列的整数数组。
一个整数函数 squareAndSort(int *arr, int n) 以整数数组作为输入,并以排序方式返回数组中每个元素的平方。
使用数组的左元素和最右元素初始化两个指针 left 和 right。
打印元素的平方并将其与右元素的平方进行比较。
相应地增加和减少左指针和右指针。
示例
#include <bits/stdc++.h>
using namespace std;
vector<int> squareAndSort(vector<int>&arr){
int left= 0;
int right= arr.size()-1;
vector<int>vec;
while(left<=right){
while(left <= right) {
int v1 = arr[left]*arr[left];
int v2 = arr[right]*arr[right];
if(v1 <= v2) {
vec.push_back(v2);
right--;
}
else {
vec.push_back(v1);
left++;
}
}
reverse(vec.begin(), vec.end());
}
return vec;
}
int main(){
vector<int>arr= {-3,-1,0,1,4,6};
vector<int>ans= squareAndSort(arr);
for(auto x:ans){
cout<<x<<" ";
}
return 0;
}输出
运行以上代码将生成以下输出:
0 1 1 9 16 36
数组中每个元素的平方为 9,1,0,1,16,36。排序这些元素后,输出将为 0 1 1 9 16 36。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP