Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การแปลงอาร์เรย์ใน C++


สมมติว่ามีอาร์เรย์เริ่มต้น arr ให้พิจารณาทุกวันว่าเราสร้างอาร์เรย์ใหม่โดยใช้อาร์เรย์ของวันก่อนหน้า ในวันที่ i-th เราจะดำเนินการต่อไปนี้ในอาร์เรย์ของวันที่ i-1 เพื่อสร้างอาร์เรย์ของวันที่ i โดยมีเงื่อนไขดังนี้ −

  • หากองค์ประกอบมีขนาดเล็กกว่าค่าที่อยู่ติดกันทั้งด้านซ้ายและด้านขวา องค์ประกอบนี้จะเพิ่มขึ้น

  • หากองค์ประกอบใหญ่กว่าค่าที่อยู่ติดกันทั้งด้านซ้ายและด้านขวา องค์ประกอบนี้จะลดลง

  • องค์ประกอบแรกและองค์ประกอบสุดท้ายจะยังคงเหมือนเดิม

หลังจากผ่านไปหลายวัน อาร์เรย์จะไม่เปลี่ยนแปลงอีกต่อไป หาอาร์เรย์สุดท้ายนั้น ดังนั้นหากอาร์เรย์เริ่มต้นคือ [6,2,3,4] ผลลัพธ์จะเป็น [6,3,3,4] ในวันแรก อาร์เรย์จะเปลี่ยนจาก [6,2,3,4] เป็น [6,3,3,4] จากนั้นจะไม่มีการดำเนินการใดๆ อีก

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้าขนาดอาร์เรย์เท่ากับ 2 หรือน้อยกว่า 2 ให้คืนค่าอาร์เรย์
  • ตั้งค่าสถานะ :=true
  • ในขณะที่แฟล็กเป็นจริง −
    • ตั้งค่าสถานะ :=false
    • สร้างอาร์เรย์ว่างหนึ่งรายการที่เรียกว่า temp และแทรก arr[0] ลงใน temp
    • สำหรับฉันในช่วง 1 ถึงขนาดอาร์เรย์ – 1
      • ถ้า arr[i]
      • มิฉะนั้น เมื่อ arr[i]> arr[i - 1] และ arr[i]> arr[i + 1] จากนั้นใส่ arr[i] – 1 ลงใน temp และตั้งค่าสถานะ :=true
      • มิฉะนั้นให้ใส่ arr[i] ลงใน temp
    • แทรกองค์ประกอบสุดท้ายของ arr ลงใน temp
    • arr :=อุณหภูมิ
  • กลับ arr

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −

#include <bits/stdc++.h>
using namespace std;
#define push push_back
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> transformArray(vector<int>& arr) {
      if(arr.size()<=2)return arr;
      bool flag = true;
      while(flag){
         flag = false;
         vector <int> temp;
         temp.push_back(arr[0]);
         for(int i = 1; i < arr.size()-1; i++){
            if(arr[i]< arr[i-1] && arr[i]<arr[i+1]){
               temp.push(arr[i]+1);
               flag = true;
            }
            else if(arr[i]> arr[i-1] && arr[i]>arr[i+1]){
               flag = true;
               temp.push(arr[i]-1);
            }
            else temp.push(arr[i]);
         }
         temp.push_back(arr[arr.size()-1]);
         arr = temp;
      }
      return arr;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,6,3,4,3,5};
   print_vector(ob.transformArray(v));
}

อินพุต

[1,6,3,4,3,5]

ผลลัพธ์

[1,4,4,4,4,5]