কম্পিউটার

দীর্ঘতম ব্যবধান যার মধ্যে C++ একটি সংখ্যা রয়েছে


ধরুন আমাদের কাছে সংখ্যা বলা স্বতন্ত্র পূর্ণসংখ্যার একটি তালিকা আছে। আমাদের সবচেয়ে বড় ব্যবধানের (অন্তর্ভুক্ত) [শুরু, শেষ] আকার খুঁজে বের করতে হবে যাতে এটি সংখ্যায় সর্বাধিক একটি সংখ্যা থাকে।

সুতরাং, যদি ইনপুটটি nums =[10, 6, 20] এর মত হয়, তাহলে আউটপুট হবে 99990, কারণ বৃহত্তম ব্যবধান [11, 100000], এতে শুধুমাত্র 20 রয়েছে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ret :=-inf

  • শেষ :=100000

  • পূর্ববর্তী :=1

  • অ্যারের সংখ্যাগুলি সাজান

  • n :=সংখ্যার আকার

  • আরম্ভ করার জন্য i :=0, যখন i <সংখ্যার আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −

    • i + 1

      • উচ্চ :=সংখ্যা[i + 1] - 1

    • অন্যথায়

      • উচ্চ :=শেষ

    • যদি i - 1>=0, তাহলে −

      • কম :=পূর্ববর্তী + 1

    • অন্যথায়

      • নিম্ন :=পূর্ববর্তী

    • পূর্ববর্তী :=সংখ্যা[i]

    • ret :=সর্বোচ্চ - নিম্ন + 1 এবং ret

  • রিটার্ন রিটার্ন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<int> &nums) {
      int ret = INT_MIN;
      int end = 100000;
      int prev = 1;
      sort(nums.begin(), nums.end());
      int n = nums.size();
      int low, high;
      for (int i = 0; i < nums.size(); i++) {
         if (i + 1 < n) {
            high = nums[i + 1] - 1;
         } else
         high = end;
         if (i - 1 >= 0) {
            low = prev + 1;
         } else
         low = prev;
         prev = nums[i];
         ret = max(high - low + 1, ret);
      }
      return ret;
   }
};
main() {
   Solution ob;
   vector<int> v = {10, 6, 20};
   cout << (ob.solve(v));
}

ইনপুট

{10, 6, 20}

আউটপুট

99990

  1. C++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. C++ এ সংখ্যার অ্যারে হিসাবে উপস্থাপিত সংখ্যার সাথে একটি যোগ করা হচ্ছে?

  4. C++ এ একজনের পূর্ণসংখ্যার পরিপূরক খুঁজুন