د ورته انډول او عجیب عناصرو سره subarrays حساب کړئ


مشکل کچه په اسانۍ سره
په مکرر ډول دننه پوښتل کیږي Accenture حقیقت انځورونه
پیشه هاش

... inte.. .ﺎ you.. inte.. given .ﮐړ سور د N اندازه. لکه څنګه چې شمیر شتون لري ، شمیرې عجیب یا حتی دي. د ستونزې بیان د ورته حوي او عجیب عناصرو سره فرعي شمیرل کیږي یا د فرعي سرنو شمیر معلوموي چې مساوي او هم عجیب عدد لري.

بېلګه

ننوتۍ

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

Output

3

تشریح

لکه څنګه چې دلته ⇒ {2، 5}، {1، 6}، {2، 5، 1، 6} دي

ننوتۍ

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

Output

7

الګوریتم

  1. دوه سري اعلان کړئ ، مثبت Num او د n + 1 اندازه منفي.
  2. شمیره او محصول 0 ته تنظیم کړئ ، او مثبت نوم [0] ته 1 ته تنظیم کړئ.
  3. سرنی ترې تېر کړئ له i = 0 څخه ، i ته
    1. وګوره که سم اړخ او عملیه تیر شي [i] او 1 د 1 سره مساوي دي ،
      1. که ریښتیا وي ، نو بیا شمیره د 1 لخوا ډیروئ.
    2. بل ، د 1 لخوا شمیر کم کړئ.
    3. که چیرې شمیرنه له 0 څخه کم وي ، نو بیا یې په منفي نوم [[حساب]] کې وراضافه کړئ او آؤټ پټ ته یې زیرمه کړئ.
    4. نور ، محصول مثبتNum [شمیرې] ته وراضافه کړئ او آؤټ پټ ته یې زیرمه کړئ.
  4. بیرته راګرځول.

تشریح

موږ به دوه hash تیرونه وکړو ، یو د مثبت توپیر ذخیره کولو لپاره ، او یو د منفي اختلافاتو لپاره. د توپیرونو سره ، زموږ مطلب د ویلو لپاره دی ، موږ د عجيل او حتی عدد تعددونو ترمینځ توپیرونه وینو. محصول 0 ته تنظیم کړئ ، پدې کې ، موږ به خپل ځواب تازه کړو ، 0 ته حساب وکړو ، دا به د توپیر شمیره وساتي. وروسته له هغه چې دوه هیش ارې اعلان شوې ، لومړی یې 1 ته وټاکئ ، مثبت نوم [0] = 1.

موږ به صف کې تیر کړو ، او وګورو چې ایا دا یو عجیب ارزښت دی یا مثبت ، د دې لپاره موږ به د Bitwise And آپریټر وکاروو ، که د 1 او کوم ارزښت ترمنځ د AND آپریټر وکاروو ، نو موږ به دوه پایلې ترلاسه کړو ، که له 1 یا 0 سره ، که د عجيبه ده دا به 1 د آؤټ پټ په توګه درکړي ، که دا حتی وي ، نو دا د محصول په توګه ورکوي. که چیرې دا شمیره 0 وموندل شي ، نو بیا موږ د 1 لخوا شمیره لوړه کوو ، نو دا یوازې 1 کولی شي ، نو موږ به د ورته شمېرنې ارزښت 0 لخوا کم کړو.

د دې کولو په وخت کې ، موږ باید خپل محصول وساتو ، د دې لپاره که موږ وموندله چې د شمېرنې ارزښت له 0 څخه کم وي ، نو بیا به موږ د محصول لپاره د منفي شمېرنې د شاخص ارزښت اضافه کړو او د 1 لخوا د منفي نیوم شمیره نوره هم لوړه کړو. موږ یوازې شمیره له 0 کچې یا مساوي وموندله ، نو موږ به د مثبت شمېرنې شمیره په محصول کې ور اضافه کړو او د 1 لخوا به د सकारात्मक نیوم شمیره لوړه کړو مهمه خبره دا ده کله چې موږ د دواړو مساوي ارزښت ومومو د hash اوسني شاخص زمینه برابروي ، دا پدې مانا ده چې موږ زموږ لپاره یو عجیب فرعي صف وموند. او په پای کې ، موږ به وتلو ته راستون شو.

تطبیق

د ورته حتی او عجیب عناصرو سره د شمیرو سبریري لپاره C ++ برنامه

#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

د ورته حتی او عجیب عناصرو سره د شمیرو سبریري لپاره د پیچلو تحلیل

د وخت پیچلتیا

اې (N) هلته "n" په صف کې د عناصرو شمیر دی.

د ځای پیچلتیا

O (2n) هلته "n" په صف کې د عناصرو شمیر دی.