د f (a [i] ، a [j]) جوډ د n پټو کښونو په کتار کې په ټولو جوړو


مشکل کچه په اسانۍ سره
په مکرر ډول دننه پوښتل کیږي سیسکو فیسبوک هیک د پبلیسس سیپینټ
پیشه هاش ریاضی

د ستونزې بیان غوښتنه کوي چې د F (a [i] ، a [j]) مجموعه په ټول انډول کې د n بشپړ انبارونو کې پدې ډول ومومي چې 1 <= i <j <= n په پام کې ونیول شي چې موږ چمتو شوي یو د عددونو یو کتار.

د f (a [i] ، a [j]) جوډ د n پټو کښونو په کتار کې په ټولو جوړو

بېلګه

arr[] = {1, 2, 3, 1, 3}
4

تشریح

یوازې جوړه 3,1،3,1 او XNUMX،XNUMX جوړه.

arr[]={2, 2, 1, 1, 3}
4

تشریح

دلته هم ، دوه جوړه (1 ، 3) شتون لري.

الګوریتم

  1. اعلامیه a نقشه او تنظیم یې کړئ محصول تر 0 او چکونه ته 0 ته.
  2. سرنی له پیل څخه تیر کړئ i = 0 ته i = n,
    1. محصول + = (i * a [i]) وکړئ - چیکسوم او چیکسوم + = a [i]؛
    2. وګورئ چې ایا [i] -1 په نقشه کې د کلي په توګه شتون لري.
      1. که ریښتیا وي ، نو بیا نخشه کې د نقشې د [i] -1 ارزښت په اضافه کولو سره محصول وټاکئ.
      2. وګوره که a [i] +1 په نقشه کې د کیلي په توګه شتون لري. که ریښتیا وي ، نو بیا نخشه کې د نقشې د [i] +1 ارزښت په اضافه کولو سره محصول وټاکئ.
    3. که شرایط هیڅ نه خوښوي ، نو بیا په ساده ډول په نقشه کې د صف د عنصر فریکونسي حساب او ذخیره کړئ.
  3. بیرته راګرځول.

تشریح

موږ یو شو سور ضمیمه، زموږ دنده دا ده چې په صف کې موجود ټولو جوړه جوړه وموندل شي چې پورتنی حالت خوښوي. که هیڅ جوړه جوړه شوي وضعیت پوره نه کړي نو بیا موږ ساده 0 ته راستون شو د دې حل کولو لپاره به موږ a وکاروو نقشه او په ورته وخت کې په هر صف عنصر باندې ټول عملیات ترسره کول او زموږ محصول تازه کول او زموږ په نقشه کې هم چیک کول. موږ یو اضافي تغیر ورکوو چې زموږ په ریښتیني محصول باندې نظر ساتي ، موږ کولی شو دا د چیکسوم په توګه ووایو. موږ به 0 ته محصول او چیکسم وټاکو. او دا چې موږ د n بشپړټونو په صف کې په ټولو جوړو کې د f (a [i] ، a [j]) مجموعه ورکوو.

راځئ چې یوه بېلګه په نظر کې ونیسو:

بېلګه

آرر [] = {1 ، 2 ، 3 ، 1 ، 3} ، محصول: 0 ، چکسم: 0

  • موږ به د 0 شاخص عنصر غوره کړو او بیا به یې ترسره او بیا د دې شاخص لخوا ضرب کړو ، او د چیکسم ضمیمه کړو او بیا به یې په محصول کې ورسوو ، موږ ترلاسه کړل

محصول: 0 ، چکسم: 1

نقشه {1 = 1} ، هرډول شرایط نه پوره کیږي ، نو موږ په نقشه کې ارزښت اضافه کوو.

  • د 1 لپارهst د شاخص عنصر ، ورته عملیات ترسره کړئ ، مګر دا ځل ، دا به د لومړي که حالت شرط پوره کړي ، او د تازه محصول ترلاسه کولو وروسته ، موږ ترلاسه کوو.

تازه شوی محصول: 0 ، چکسم: 3

نقشه {1 = 1 ، 2 = 1} ، دا ځل هم موږ دا ارزښت په نقشه کې د هغې پیښې سره اضافه کوو.

  • د 2 لپارهnd عنصر ، ورته عملیات د پخوا په څیر ترسره شوي ، دا ځل دا عنصر موندل کیږي [i] -1 او موږ تازه محصول ترلاسه کړ:

تازه شوی محصول: 2 ، چکسم: 6

نقشه {1 = 1 ، 2 = 1 ، 3 = 1} ، عنصر او د دې فریکونسۍ زیاتول.

  • د دریم عنصر لپاره ، دا دوهم ته اطمینان ورکوي که بیان ، پدې معنی دی چې که نقشه یو ارزښت ولري [i] +3 ، نو وروسته له هغه چې موږ تازه محصول ترلاسه کړو:

تازه شوی محصول: 0 ، چیکسوم: 7 ، نقشه: {1 = 2 ، 2 = 1 ، 3 = 1}

  • د څلورم عنصر لپاره ، د لومړۍ که تصویب وروسته.

تازه شوی محصول: 4 ، چکسم: 10

نخشه {1 = 2 ، 2 = 1 ، 3 = 2}

او موږ به وتلو ته راستون شو: 4

کوډ

C ++ کوډ د f (a [i] ، a [j]) مجموعه موندلو لپاره د n بشپړټونو په لړ کې

#include<iostream>
#include<unordered_map>

using namespace std;

int sum(int a[], int n)
{
    unordered_map<int, int> count;

    int output = 0, checksum = 0;
    for (int i = 0; i < n; i++)
    {
        output += (i * a[i]) - checksum;
        checksum += a[i];

        if (count[a[i] - 1])
            output -= count[a[i] - 1];

        if (count[a[i] + 1])
            output += count[a[i] + 1];

        count[a[i]]++;
    }
    return output;
}
int main()
{
    int a[] = { 1, 2, 3, 1, 3 };
    int n = sizeof(a) / sizeof(a[0]);
    cout << sum(a, n);
    return 0;
}
4

د جاوا کوډ د f (a [i] ، a [j]) مجموعه موندلو لپاره د n بشپړونو په صفونو کې د ټولو جوړه

import java.util.HashMap;
public class pairSum
{
    public static int sum(int a[], int n)
    {
        HashMap<Integer,Integer> count = new HashMap<Integer,Integer>();

        int output = 0, checksum = 0;
        for (int i = 0; i < n; i++)
        {
            output += (i * a[i]) - checksum;
            checksum += a[i];

            if (count.containsKey(a[i] - 1))
                output -= count.get(a[i] - 1);

            if (count.containsKey(a[i] + 1))
                output += count.get(a[i] + 1);

            if(count.containsKey(a[i]))
            {
                count.put(a[i], count.get(a[i]) + 1);
            }
            else
            {
                count.put(a[i], 1);
            }
        }
        return output;
    }
    public static void main(String args[])
    {
        int a[] = { 1, 2, 3, 1, 3 };
        int n = a.length;
        System.out.println(sum(a, n));
    }
}
4

د پیچلتیا تحلیل

د وخت پیچلتیا

اې (N) هلته "n" په صف کې د عناصرو شمیر دی. د هش میپ کارول موږ ته اجازه راکوي چې په کې دننه لټون / حذف / اضافه کول ترسره کړو O (1). په دې توګه د n بشپړټونو په صف کې په ټولو جوړې د f (a [i] ، a [j]) د موندلو لپاره وخت پیچلتیا لاین ته راټیټیږي.

د ځای پیچلتیا

اې (N) هلته "n" په صف کې د عناصرو شمیر دی. له هغه ځایه چې موږ ممکن د هش میپ کې n کیلې داخل کړو ، نو پدې توګه د ځای پیچلتیا لاهم وي.