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

C++-এ অ্যারেতে সবচেয়ে লম্বা মাউন্টেন খুঁজে বের করা

কোনো (সন্নিহিত) সাবঅ্যারে B (অ্যারে A-এর) একটি মাউন্টেন বলা হবে যদি নিচের শর্তগুলো পূরণ হয় −

  • B-র আকার >= 3
  • কোনো 0 < i < B.length - 1 থাকে যাতে B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]

মান করুন আমাদের একটি পূর্ণসংখ্যা অ্যারে A দেওয়া আছে; আমাদের সবচেয়ে লম্বা মাউন্টেনের দৈর্ঘ্য খুঁজে বের করতে হবে। মাউন্টেন না থাকলে 0 ফেরত দিতে হবে। যদি ইনপুট হয় [2,1,4,7,3,2,5], তবে ফলাফল হবে 5। সবচেয়ে বড় মাউন্টেন হবে [1,4,7,3,2], যার দৈর্ঘ্য 5।

এটি সমাধান করার জন্য নিচের ধাপগুলি অনুসরণ করুন −

  • ret := 0, n := a অ্যারের আকার
  • i := 0 থেকে n - 1, i কে j + 1 দিয়ে বৃদ্ধি করুন
    • j := i
    • down := false, up := false
    • while j + 1 < n && a[j + 1] > a[j]
      • up := true এবং j 1 বৃদ্ধি করুন
    • while up && j + 1 < n && a[j + 1] < a[j]
      • down := true এবং j 1 বৃদ্ধি করুন
    • যদি up এবং down উভয়ই true হয়, ret := max(j - i + 1, ret) সেট করুন, j 1 কমান
  • ret ফেরত দিন

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int longestMountain(vector<int>& a) {
        int ret = 0;
        int n = a.size();
        int j;
        for(int i = 0; i < n; i = j + 1){
            j = i;
            bool down = false;
            bool up = false;
            while(j + 1 < n && a[j + 1] > a[j]) {
                up = true;
                j++;
            }
            while(up && j + 1 < n && a[j + 1] < a[j]){
                down = true;
                j++;
            }
            if(up && down){
                ret = max(j - i + 1, ret);
                j--;
            }
        }
        return ret;
    }
};

main(){
    vector<int> v = {2,1,4,7,3,2,5};
    Solution ob;
    cout << (ob.longestMountain(v));
}

ইনপুট

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

আউটপুট

5
  1. সর্বোচ্চ দীর্ঘ রিপিটিং সাবস্ট্রিং (C++)

  2. সি++-এ লংগেস্ট টার্বুলেন্ট সাবঅ্যারে (Longest Turbulent Subarray)

  3. C++-এ স্ট্রিং এর অ্যারে (C++ Array of Strings)

  4. C++-এ সর্টিং (Sorting)