কম্পিউটার

C++ এ একটি সাজানো বিন্যাসে একটি উপাদানের শুরু এবং শেষ সূচক খুঁজুন


এই সমস্যায়, আমাদেরকে n পূর্ণসংখ্যার মানের একটি অ্যারে [] দেওয়া হয়েছে যা সাজানো হয়নি এবং একটি পূর্ণসংখ্যা ভাল। আমাদের কাজ হল একটি সাজানো বিন্যাসে একটি উপাদানের শুরু এবং শেষের সূচী খুঁজে পাওয়া .

অ্যারেতে উপাদানটির উপস্থিতির জন্য, আমরা ফিরে আসব,

"সূচনাসূচী এবং সমাপ্তি সূচী" যদি এটি অ্যারেতে দুইবার বা তার বেশি পাওয়া যায়।

"একক সূচক" যদি এটি অ্যারেতে একবার পাওয়া যায়।

"উপাদান উপস্থিত নেই" যদি এটি অ্যারেতে উপস্থিত না থাকে।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

উদাহরণ 1

Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 2
Output : starting index = 0, ending index = 5

ব্যাখ্যা

উপাদান 2 এর দুটি ঘটনা রয়েছে,
সূচকে প্রথমে =0,
সূচকে দ্বিতীয় =5

উদাহরণ 2

Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 5
Output : Present only once at index 2

ব্যাখ্যা

সূচক =2,

-এ উপাদান 5-এর শুধুমাত্র একটি ঘটনা রয়েছে

উদাহরণ 3

Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 7
Output : Not present in the array!

সমাধান পদ্ধতি

সমস্যার একটি সহজ সমাধান হল অ্যারে অতিক্রম করে।

আমরা অ্যারে অতিক্রম করব এবং দুটি সূচক মান রাখব, প্রথম এবং শেষ। প্রথম সূচকটি শুরু থেকে অ্যারেটি অতিক্রম করবে এবং শেষ সূচকটি শেষ থেকে অ্যারেটি অতিক্রম করবে। এবং তারপর লুপটি শেষ করুন যখন প্রথম এবং শেষ সূচকে উপাদানটির মান একই হয়ে যায়।

অ্যালগরিদম

  • ধাপ 1 - অ্যারের মাধ্যমে লুপ করুন

    • পদক্ষেপ 1.1৷ − শুরু থেকে ট্রাভার্স করার জন্য প্রথম সূচী এবং শেষ থেকে শেষ সূচী ব্যবহার করুন।

    • পদক্ষেপ 1.2৷ − যদি কোনো সূচকে মান ভ্যালের সমান হয়। সূচক মান বৃদ্ধি করবেন না।

    • পদক্ষেপ 1.3৷ − যদি উভয় সূচকে উভয় মান একই রিটার্ন হয়।

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম

#include <iostream>
using namespace std;

void findStartAndEndIndex(int arr[], int n, int val) {
   int start = 0;
   int end = n -1 ;
   while(1){
   if(arr[start] != val)
      start++;
   if(arr[end] != val)
      end--;
   if(arr[start] == arr[end] && arr[start] == val)
      break;
   if(start == end)
      break;
}
   if (start == end ){
      if(arr[start] == val)
         cout<<"Element is present only once at index : "<<start;
      else
         cout<<"Element Not Present in the array";
   } else {
      cout<<"Element present twice at \n";
      cout<<"Start index: "<<start<<endl;
      cout<<"Last index: "<<end;
   }
}
int main() {
   int arr[] = { 2, 1, 5, 4, 6, 2, 9, 0, 2, 3, 5 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int val = 2;
   findStartAndEndIndex(arr, n, val);
   return 0;
}

আউটপুট

Element present twice at
Start index: 0
Last index: 8

  1. C++ ব্যবহার করে একটি সাজানো বিন্যাসে মেঝে এবং ছাদ খুঁজুন।

  2. C++-এ অ্যারের প্রতিটি উপাদানের সারপাসার কাউন্ট খুঁজুন

  3. C++ প্রোগ্রাম দুটি সাজানো না করা অ্যারের মিলন এবং ছেদ খুঁজে বের করতে

  4. একটি অ্যারের সবচেয়ে বড় উপাদান খুঁজে পেতে C++ প্রোগ্রাম