কম্পিউটার টিউটোরিয়াল

C++-এ ক্রমবর্ধমান সিকোয়েন্স বানাতে ন্যূনতম сваপ


একই শূন্যेतর দৈর্ঘ্যের দুটি পূর্ণসংখ্যা সিকোয়েন্স A আর B দেওয়া আছে। আমরা A[i] আর B[i] сваপ করতে পারি। দুই উপাদানই তাদের নিজস্ব সিকোয়েন্সে একই ইন্ডেক্সে থাকে। কিছু сваপের পর A আর B — দুটোই কঠোরভাবে ক্রমবর্ধমান হবে। উভয় সিকোয়েন্স কঠোরভাবে ক্রমবর্ধমান করতে ন্যূনতম কতগুলো сваপ লাগবে তা বের করতে হবে।

উদাহরণ: A = [1,3,5,4], B = [1,2,3,7] হলে উত্তর ১। যদি A[3] আর B[3] স্বাপ করি, তাহলে A = [1,3,5,7], B = [1,2,3,4] — দুটোই কঠোরভাবে ক্রমবর্ধমান।

সমাধানের ধাপগুলো:

  • n := A.size(), আকার n-এর দুটি অ্যারে swapCnt আর noSwapCnt বানান।
  • swapCnt[0] = 1, noSwapCnt[0] = 0।
  • i = 1 থেকে n-1 পর্যন্ত:
    • swapCnt[i] := n, noSwapCnt[i] := n
    • যদি A[i] > A[i-1] AND B[i] > B[i-1]:
      • noSwapCnt[i] := noSwapCnt[i-1]
      • swapCnt[i] := swapCnt[i-1] + 1
    • যদি A[i] > B[i-1] AND B[i] > A[i-1]:
      • swapCnt[i] := min(swapCnt[i], 1 + noSwapCnt[i-1])
      • noSwapCnt[i] := min(swapCnt[i-1], noSwapCnt[i])
  • min(swapCnt[n-1], noSwapCnt[n-1]) ফেরত দিন।

উদাহরণ (C++)

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int minSwap(vector<int>& A, vector<int>& B) {       int n = A.size();       vector <int> swapCnt(n), noSwapCnt(n);       swapCnt[0] = 1;       noSwapCnt[0] = 0;       for(int i = 1; i < n; i++){          swapCnt[i] = n;          noSwapCnt[i] = n;          if(A[i] > A[i - 1] && B[i] > B[i - 1]){             noSwapCnt[i] = noSwapCnt[i - 1];             swapCnt[i] = swapCnt[i - 1] + 1;          }          if(A[i] > B[i - 1] && B[i] > A[i - 1]){             swapCnt[i] = min(swapCnt[i], 1 + noSwapCnt[i - 1]);             noSwapCnt[i] = min(swapCnt[i - 1], noSwapCnt[i]);          }       }       return min(swapCnt[n - 1], noSwapCnt[n - 1]);    } }; main(){    vector<int> v1 = {1,3,5,4};    vector<int> v2 = {1,2,3,7};    Solution ob;    cout << (ob.minSwap(v1, v2)); }

ইনপুট

[1,3,5,4] [1,2,3,7]

আউটপুট

1

  1. C++-এ স্ট্রিংকে ভ্যালিড প্যারেনথেসিস बनाने মিনিমাম প্যারেনথেসিস যোগ করা

  2. C++ ব্যবহার করে n তৈরির জন্য ন্যূনতম অক্ষর সংখ্যা

  3. C++ ব্যবহার করে স্ট্রিংকে প্যালিনড্রোম করার ন্যূনতম ডিলিশন সংখ্যা

  4. C++-এ কো-প্রাইম অ্যারে बनाने জন্য ন্যূনতম ইনসারশন