প্রদত্ত ক্রম থেকে সর্বনিম্ন সংখ্যা গঠন করুন


কাঠিন্য মাত্রা মধ্যম
প্রায়শই জিজ্ঞাসা করা হয় সমষ্টি মর্দানী স্ত্রীলোক ধর্মান্ধদের গোল্ডম্যান শ্যাস তথ্য প্রান্ত Snapchat
বিন্যাস গাদা স্ট্রিং

"প্রদত্ত ক্রম থেকে ফর্ম ন্যূনতম সংখ্যা" সমস্যাটি আপনাকে জানিয়েছে যে আপনাকে কিছু প্যাটার্ন দেওয়া হয়েছে আমি এবং ডি এস কেবল. অর্থ I হ'ল আমাদের বৃদ্ধি এবং হ্রাস করার জন্য সরবরাহ করা হয় D। সমস্যার বিবৃতিটি ন্যূনতম সংখ্যাটি মুদ্রণ করতে বলে যা প্রদত্ত প্যাটার্নটিকে সন্তুষ্ট করে। আমাদের 1-9 থেকে অঙ্কগুলি ব্যবহার করতে হবে এবং কোনও অঙ্কের পুনরাবৃত্তি করা উচিত নয়।

উদাহরণ

DIID
21354

ব্যাখ্যা

প্রথম অঙ্কটি 2 হ'ল এর পরে এটি হ্রাসের পরের পরের অঙ্কটি 1 হবে Then তারপরে 2 বৃদ্ধি করা 3 কে ন্যূনতম অঙ্ক হিসাবে 2 তৈরি করবে যা 2 এর চেয়ে বেশি And । যেহেতু অঙ্কগুলি পুনরাবৃত্তি করা যায় না। সুতরাং আমরা এটি 1 দ্বারা বৃদ্ধি করব এবং তারপরে এটি XNUMX দ্বারা হ্রাস করব।

সুতরাং আউটপুট 2 1 3 5 4 হয়ে যাবে

আবার আমরা বর্তমান সংখ্যাটি বাড়িয়েছি। তবে এটি করলে আমাদের 4 টি দেবে এবং হ্রাসের পরে আমাদের 1, 2, বা 3 ব্যবহার করতে হবে এবং এই সমস্ত অঙ্ক ইতিমধ্যে ব্যবহার করা হয়েছিল। সুতরাং আমাদের বর্তমান সংখ্যাটি 5 বাড়াতে হবে এবং আমরা উত্তরে পৌঁছাতে পারি।

প্রদত্ত ক্রম থেকে ন্যূনতম সংখ্যা গঠনের জন্য অ্যালগরিদম

  1. প্রদত্ত ক্রমের দৈর্ঘ্য 9 এর চেয়ে বেশি বা সমান কিনা তা যদি সত্য হয় তবে পরীক্ষা করুন -1।
  2. N + 1 আকারের একটি চর অ্যারে ঘোষণা করুন এবং গণনার মান 1 এ সেট করুন।
  3. 0 থেকে n (সমেত) থেকে অ্যারেটি অনুসরণ করা শুরু করুন।
    1. চেক করুন যদি i সমান n অথবা স্ট্রিংয়ের বর্তমান চরিত্রটি "I" এর সমান, যদি এটি হয় তবে সত্য
      1. -1 এর পূর্ববর্তী মান থেকে অ্যারেটি অতিক্রম করুন।
        1. নিম্নলিখিত পদক্ষেপগুলি করে আউটপুট অ্যারের মানগুলি আপডেট করুন।
          1. গণনার মান বৃদ্ধি করুন এবং আউটপুট অ্যারেতে সঞ্চয় করুন।
          2. চেক করুন যদি j বর্তমান সূচকটি 0 এর চেয়ে বড় এবং স্ট্রিংয়ের বর্তমান চরিত্রটি "I", তারপরে বিরতি।
  4. রিটার্ন ফলাফল।

ব্যাখ্যা

একটি স্ট্রিং দেওয়া হয়েছে এবং কেবলমাত্র আমি এবং ডি এরই, আমাদের দেওয়া প্যাটার্নটি মুদ্রণ করতে বলা হয় যা প্রদত্ত সাথে গঠন করা যেতে পারে স্ট্রিং। এখানে I ক্রমবর্ধমানকে বোঝায় যে আমাদের একটি ন্যূনতম সংখ্যা তৈরি করতে হবে বা তৈরি করতে হবে যা প্রদত্ত ক্রমটিকে ন্যায়সঙ্গত করতে পারে। ধরুন আমরা যদি বলি DI, কোথায় D হ'ল ন্যূনতম সংখ্যা হ্রাস হ'ল ২ হ'ল ন্যূনতম সংখ্যা হিসাবে 2 গঠন করে। অঙ্কগুলি পুনরাবৃত্তি করা যাবে না, সংখ্যাটি কেবল 21-1 থেকে অঙ্কগুলি থাকতে পারে। এর পরে, "আমি" সেখানে রয়েছে, আমাদের ন্যূনতম বর্ধমান সংখ্যা গঠন করা উচিত। 9 যেহেতু ইতিমধ্যে সেখানে আছে। আমরা একটি বর্ধমান সংখ্যা গঠন লক্ষ্য। এইভাবে 21 এর পরে 1 হয়, কারণ 3 ইতিমধ্যে ব্যবহারে রয়েছে, এবং এর পরে 2 কেবলমাত্র যোগ হওয়া যায়।

এই সমস্ত ধারণা এবং ধারণার সাথে, আমাদের সেই ন্যূনতম সংখ্যাটি মুদ্রণ করতে বলা হয় যা প্রদত্ত শর্তাদি অনুসরণ করে এবং সন্তুষ্ট করে। আমরা আউটপুট অ্যারে ব্যবহার করতে যাচ্ছি যেখানে আমরা সকলেই আমাদের আউটপুট সেই অক্ষর অ্যারে সংরক্ষণ করি। আমরা ডেটা বৈধকরণ এবং যাচাইয়ের জন্য কিছু শর্ত তৈরি করেছি। যদি আমরা স্ট্রিংটির দৈর্ঘ্য 9 এর চেয়ে বেশি বা তার সমান হয় তবে আমরা -1 ফিরতি কারণ আমাদের কঠোরভাবে 1-9 সংখ্যা ব্যবহার করার আদেশ দেওয়া হয়েছে এবং কোনও অঙ্ক পুনরাবৃত্তি করা যাবে না।

আমরা একটি ইনপুট হিসাবে পেয়েছি স্ট্রিং অতিক্রম করুন। যদি বর্তমান সূচকটি স্ট্রিংয়ের দৈর্ঘ্যের সমান হয় বা বর্তমান অক্ষর "I" এর সমান হয়। তারপরে কেবল আমরা আরও এগিয়ে যাই। এরপরে বর্তমান মান (i) এর পূর্ববর্তী মান থেকে ট্র্যাক করা শুরু করুন, -1 না হওয়া পর্যন্ত। এই লুপটির অভ্যন্তরে আমরা গণনাটির মান বাড়িয়ে রেখে সূচক জে 1 তে আউটপুট অ্যারে সঞ্চয় করি into তারপরে পরীক্ষা করে দেখুন এর মান কিনা j এর চেয়ে বড় বা সমান 0 এবং যদি বর্তমান চরিত্রটি "আমি" হয় তবে। যদি সত্য হয় তবে লুপটি ভাঙ্গুন এবং আরও অক্ষরের জন্য আরও এগিয়ে যান।

কোড

প্রদত্ত ক্রম থেকে ন্যূনতম সংখ্যা গঠনের জন্য সি ++ কোড

#include<iostream>

using namespace std;

string getMinimumNumberSeq(string str)
{
    int n = str.length();

    if (n >= 9)
        return "-1";

    string output(n+1, ' ');

    int count = 1;

    for (int i = 0; i <= n; i++)
    {
        if (i == n || str[i] == 'I')
        {
            for (int j = i - 1 ; j >= -1 ; j--)
            {
                output[j + 1] = '0' + count++;
                if(j >= 0 && str[j] == 'I')
                    break;
            }
        }
    }
    return output;
}
int main()
{
    string inputs[] = { "DIID", "ID", "II", "DI", "DDII", "IDID", "IDIDID"};

    for (string input : inputs)
    {
        cout << getMinimumNumberSeq(input) << "\n";
    }
    return 0;
}
21354
132
123
213
32145
13254
1325476

প্রদত্ত ক্রম থেকে ন্যূনতম সংখ্যা গঠনের জন্য জাভা কোড

class minimumNumberID
{
    static String getMinimumNumberSeq(String str)
    {
        int n = str.length();

        if (n >= 9)
            return "-1";

        char output[] = new char[n + 1];

        int count = 1;

        for (int i = 0; i <= n; i++)
        {
            if (i == n || str.charAt(i) == 'I')
            {
                for (int j = i - 1; j >= -1; j--)
                {
                    output[j + 1] = (char) ((int) '0' + count++);
                    if (j >= 0 && str.charAt(j) == 'I')
                        break;
                }
            }
        }
        return new String(output);
    }
    public static void main(String[] args)
    {
        String inputs[] = { "DIID", "ID", "II", "DI", "DDII", "IDID", "IDIDID" };

        for(String input : inputs)
        {
            System.out.println(getMinimumNumberSeq(input));
        }
    }
}
21354
132
123
213
32145
13254
1325476

জটিলতা বিশ্লেষণ

সময় জটিলতা

চালু) কোথায় "এন" কোয়েরি স্ট্রিংয়ের দৈর্ঘ্য। প্রথমে পরীক্ষা করুন যে আমরা নেস্টেড লুপটির ভিতরে প্রবেশ করেছি, কেবলমাত্র যদি আমরা শেষের দিকে পৌঁছেছি বা বর্তমান সূচকটি I হয় And আমরা যখন কোনও আইয়ের মুখোমুখি হই এবং সেগুলিতে ডি সঞ্চিত সূচকগুলিতে কাজ করি তখন আমরা নেস্টেড লুপটিতে প্রবেশ করি। যেহেতু প্রতিটি সূচকের হয় আমি বা ডি থাকতে পারে আমরা প্রতিটি অক্ষরকে কেবল একটি করে অনুসরণ করে চলেছি। সুতরাং সময় জটিলতা রৈখিক হয়।

স্পেস জটিলতা ity

চালু), কারণ আমরা ফলাফল সংরক্ষণের জন্য একটি আউটপুট অক্ষর অ্যারে তৈরি করেছি। সমস্যার জন্য স্থান জটিলতাও লিনিয়ার।