কম্পিউটার

C++ এ ডিসজয়েন্ট ইন্টারভাল হিসেবে ডেটা স্ট্রীম


ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি ডাটা স্ট্রীম ইনপুট আছে, এগুলি হল a1, a2, ..., an, ..., আমাদের এখন পর্যন্ত দেখা সংখ্যাগুলিকে বিচ্ছিন্ন ব্যবধানের তালিকা হিসাবে সংক্ষিপ্ত করতে হবে। উদাহরণস্বরূপ, ধরুন ইনপুট পূর্ণসংখ্যা হল 1, 3, 8, 2, 7, ..., তাহলে সারাংশ হবে −

  • [১,১]

  • [১, ১], [৩, ৩]

  • [১, ১], [৩, ৩], [৮, ৮]

  • [১, ৩], [৮, ৮]

  • [১, ৩], [৭, ৮]।

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

  • সংখ্যা নামে একটি সেট তৈরি করুন

  • ইনিশিয়ালাইজারে, কম সেট করুন :=-inf এবং উচ্চ :=inf

  • addNum পদ্ধতি থেকে যা num কে ইনপুট হিসাবে নেয়, সেট nums এর মধ্যে num ঢোকান

  • প্রাপ্ত ব্যবধান পদ্ধতি থেকে, অনুসরণ করুন −

  • একটি 2D অ্যারে ret সংজ্ঞায়িত করুন

  • এটা :=সেট সংখ্যার স্টার্ট এলিমেন্ট

  • এটি সেটে থাকাকালীন, −

    করুন
    • x :=এর মান

    • ret + 1 এর শেষ উপাদানের সূচক 1 এ ret খালি বা উপাদান

      • ret

        শেষে জোড়া { x, x } সন্নিবেশ করুন
    • অন্যথায়

      • ret এর শেষ উপাদানের সূচক 1 এ উপস্থিত উপাদানটিকে 1 দ্বারা বাড়ান

    • এটি পরবর্তী উপাদানে

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

উদাহরণ

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

#include > v){ cout <<"["; for(int i =0; i সংখ্যা; int low, high; Summaryranges() { low =INT_MAX; উচ্চ =INT_MIN; } void addNum(int val) { nums.insert(val); } ভেক্টর<ভেক্টর> getIntervals() { ভেক্টর <ভেক্টর > ret; সেট  ::iterator it =nums.begin(); while(it!=nums.end()){ int x =*it; if(ret.empty() || ret.back()[1] + 1  

ইনপুট

ক্লাস শুরু করুন, তারপরে একবারে একটি উপাদান সন্নিবেশ করুন এবং বিরতিগুলি দেখুন। সুতরাং উপাদানগুলি হল [1,3,8,2,7]

আউটপুট

<পূর্ব>[[1, 1, ], [[1, 1, ], [3, 3, ], [[1, 1, ], [3, 3, ], [8, 8, ], ][[1, 3, ], [8, 8, ], [[1, 3, ], [7, 8, ],]

  1. C++ এ ঘূর্ণায়মান দরজা

  2. C++ এ বিয়ারের বোতল

  3. C++ এর মধ্যে ব্যবধান রয়েছে

  4. C++ এ গেম ভি জাম্প করুন