سب ایک جیسے اور عجیب عناصر کے ساتھ سبریوں کی گنتی کریں  


مشکل سطح آرام سے
اکثر پوچھا جاتا ہے ایکسینچر حقیقت فانٹکس
لڑی ہیش

فرض کریں کہ آپ نے ایک عدد اعداد دی ہے صف N سائز کا جیسا کہ تعداد موجود ہے ، تعداد عجیب ہے یا اس سے بھی۔ مسئلے کا بیان ایک جیسے اور عجیب عناصر کے ساتھ ضمنی گنتی ہے یا ذیلی صفوں کی گنتی کا پتہ لگاتا ہے جس میں یکساں اور عجیب عدد کی تعداد ہوتی ہے۔

مثال کے طور پر  

ان پٹ

ارر [] = {2، 5، 1، 6}؛

آؤٹ پٹ

3

وضاحت

چونکہ یہاں ⇒ {2، 5}، {1، 6}، {2، 5، 1، 6} ہیں

ان پٹ

ارر [] = {2,3,4,5,1,6،XNUMX،XNUMX،XNUMX،XNUMX،XNUMX}

آؤٹ پٹ

7

الگورتھم  

  1. دو ارای ، پازیٹو نیوم اور نیگیٹینم انم سائز n + 1 کا اعلان کریں۔
  2. گنتی اور آؤٹ پٹ کو 0 پر سیٹ کریں ، اور مثبت نمبر [0] سے 1 پر سیٹ کریں۔
  3. صف کو عبور کریں i = 0 سے ، i تک
    1. چیک کریں کہ آیا بٹ سائڈ اور آپریشن آرر [i] اور 1 برابر ہے 1 ،
      1. اگر سچ ہے تو ، گنتی میں 1 کا اضافہ کریں۔
    2. ورنہ ، گنتی کو 1 سے کم کریں۔
    3. اگر گنتی 0 سے کم ہے ، تو آؤٹ پٹ کو منفی نمبر [-حساب] میں شامل کریں اور اسے آؤٹ پٹ میں اسٹور کریں۔
    4. ورنہ ، آؤٹ پٹ کو پازیٹونم [گنتی] میں شامل کریں اور اسے آؤٹ پٹ میں اسٹور کریں۔
  4. واپسی کی واپسی

وضاحت  

ہم دو ہیش آرے بنائیں گے ، ایک مثبت فرق کو ذخیرہ کرنے کے لئے ، اور ایک منفی اختلافات کے لئے۔ اختلافات کے ساتھ ، ہمارا کہنا ہے کہ ، ہم عجیب اور یہاں تک کہ عدد کی تعدد کے درمیان فرق تلاش کریں گے۔ آؤٹ پٹ کو 0 پر مرتب کرنا ، اس میں ، ہم اپنے جواب کو اپ ڈیٹ کریں گے ، گنتی 0 کریں گے ، اس سے فرق کی گنتی برقرار رہے گی۔ دو ہیش اریزوں کے اعلان کے بعد ، ایک کو 1 سے مثبت بنائیں ، مثبت نمبر 0 [1] = XNUMX۔

یہ بھی دیکھتے ہیں
اونچائیوں کے درمیان زیادہ سے زیادہ فرق کو کم سے کم کریں

ہم صف کو عبور کریں گے ، اور چیک کریں گے کہ یہ کوئی غیرمعمولی قدر ہے یا مثبت ، اس کے لئے ہم بٹ وائز اینڈ آپریٹر کا استعمال کریں گے ، اگر 1 اور کسی بھی قدر کے درمیان اینڈ آپریٹر استعمال کریں گے ، تو ہم دونوں کا نتیجہ ، 1 یا 0 حاصل کریں گے ، اگر تعداد عجیب ہے یہ آؤٹ پٹ کے طور پر 1 دے گا ، اگر یہ پھر بھی ہے تو ، اسے آؤٹ پٹ کے طور پر 0 دیتی ہے۔ اگر اس کی تعداد 1 ہو ، تو ہم گنتی کو 1 سے بڑھا رہے ہیں ، ورنہ یہ صرف 0 ہوسکتی ہے ، لہذا ہم اسی گنتی کی قدر کو 1 سے کم کردیں گے۔

یہ کرتے وقت ، ہمیں اپنا آؤٹ پٹ برقرار رکھنا چاہئے ، اس کے ل if اگر ہمیں پایا کہ گنتی کی قدر 0 سے کم ہے ، تو ہم آؤٹ پٹ میں نیتنم شمار کی انڈیکس ویلیو کی قیمت میں اضافہ کریں گے اور منفی نمبر کی گنتی کو 1 سے بڑھا دیں گے۔ ہمیں صرف 0 سے زیادہ یا اس کے برابر کی تعداد ملی ہے ، لہذا ہم آؤٹ پٹ میں مثبت نمبر کی فہرست کے اشاریہ کی اقدار کو شامل کریں گے اور 1 سے पॉیزینٹیونم کی گنتی میں اضافہ کریں گے جب بھی ہمیں دونوں کی ایک جیسی قیمت مل جائے گی تو اہم بات یہ ہے۔ ہیش موجودہ انڈیکس کی اشاعت کرتا ہے ، اس کا مطلب ہے کہ ہمیں اپنے لئے ایک عجیب ذیلی صف مل گئی۔ اور آخر میں ، ہم آؤٹ پٹ کو واپس کردیں گے۔

عمل  

سی ایون اور عجیب عنصر والے کاؤنٹ سبریوں کے لئے سی ++ پروگرام

#include<iostream>
#include<unordered_map>

using namespace std;

int getOESubarrays(int arr[], int n)
{
    int count = 0;
    int output = 0;

    int positiveNum[n+1];
    int negativeNum[n+1];

    positiveNum[0] = 1;

    for (int i = 0; i < n; i++)
    {
        if ((arr[i] & 1) == 1) count++;
        else count--;

        if (count < 0)
        {
            output += negativeNum[-count];
            negativeNum[-count]++;
        }
        else
        {
            output += positiveNum[count];
            positiveNum[count]++;
        }
    }
    return output;
}
int main()
{
    int arr[] = {2,3,4,5,1,6};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Even Odd Sub-Arrays are: " << getOESubarrays(arr,n);
    return 0;
}
Even Odd Sub-Arrays are: 7

ایک ہی برابر اور عجیب عناصر والے کاؤنٹ سبریوں کے لئے جاوا پروگرام

class oddEvenSubArrays
{
    public static int getOESubarrays(int[] arr, int n)
    {
        int count = 0;
        int output = 0;

        int positiveNum[] = new int[n + 1];
        int negativeNum[] = new int[n + 1];

        positiveNum[0] = 1;

        for (int i = 0; i < n; i++)
        {
            if ((arr[i] & 1) == 1) count++;
            else count--;

            if (count < 0)
            {
                output += negativeNum[-count];
                negativeNum[-count]++;
            }
            else
            {
                output += positiveNum[count];
                positiveNum[count]++;
            }
        }
        return output;
    }
    public static void main(String[] args)
    {
        int arr[] = {2,3,4,5,1,6};
        int n = arr.length;
        System.out.println("Even Odd Sub-Arrays are: "+getOESubarrays(arr, n));
    }
}
Even Odd Sub-Arrays are: 7

ایک ہی برابر اور عجیب عناصر کے ساتھ گنتی سبریوں کے لئے پیچیدگی کا تجزیہ  

وقت کی پیچیدگی

اے (ن) کہاں "این" صف میں عناصر کی تعداد ہے۔

یہ بھی دیکھتے ہیں
جوڑی میں صف تقسیم کرنے کے ساتھ ساتھ کے تقسیم کی رقم کے ساتھ

خلائی پیچیدگی

O (2n) کہاں "این" صف میں عناصر کی تعداد ہے۔