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

Max Chunks เพื่อจัดเรียงใน C ++


สมมติว่าเราให้อาร์เรย์ arr ซึ่งเป็นการเรียงสับเปลี่ยนของ [0, 1, ..., arr.length - 1] เราต้องแยกอาร์เรย์ออกเป็น "ส่วนย่อย" จำนวนหนึ่ง " หรือพาร์ติชั่น และแยกแต่ละพาร์ติชั่น ดังนั้นหลังจากเชื่อมเข้าด้วยกันแล้ว ผลลัพธ์จะเป็นอาร์เรย์ที่จัดเรียง ดังนั้นหากอาร์เรย์เป็นเหมือน [1,0,2,3,4] ผลลัพธ์จะเป็น 4 เนื่องจากเราสามารถแบ่งออกเป็นสองพาร์ติชั่นเช่น [1, 0] และ [2,3,4] แต่สิ่งนี้สามารถทำได้ ให้เป็นจริงด้วยว่า [1, 0], [2], [3], [4] นี่คือจำนวนชิ้นส่วนสูงสุดที่เป็นไปได้ ดังนั้นเอาต์พุตจึงเป็น 4

จำนวนชิ้นส่วนที่เราสามารถทำได้มากที่สุดคือเท่าใด

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

  • ans :=0, minVal :=inf, n :=ขนาดของ arr และ maxVal :=-inf
  • สำหรับฉันอยู่ในช่วง 0 ถึง n
    • maxVal :=สูงสุดของ arr[i] และ maxVal
    • ถ้า maxVal =i ให้เพิ่ม ans ขึ้น 1
  • คืนสินค้า

ตัวอย่าง

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maxChunksToSorted(vector<int>& arr) {
      int ans = 0;
      int minVal = INT_MAX;
      int n = arr.size();
      int maxVal = INT_MIN;
      for(int i = 0; i < n; i++){
         maxVal = max(arr[i], maxVal);
         if(maxVal == i){
            ans++;
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,0,2,3,4};
   cout << (ob.maxChunksToSorted(v));
}

อินพุต

[1,0,2,3,4]

ผลลัพธ์

4