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。

更新於: 2021年2月5日

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.