በሁሉም ጥንዶች ላይ የ f (a [i] ፣ a [j]) ድምር በ n ቁጥሮች ብዛት  


የችግር ደረጃ ቀላል
ውስጥ በተደጋጋሚ ተጠየቀ Cisco ፌስቡክ ረጅም መንገድ ተንሸራሸረ Publicis Sapient
ሰልፍ ሃሽ ሒሳብ

የችግር መግለጫው ከሁሉም ጥንድ በላይ የ f (a [i], a [j]) ድምርን ለመፈለግ ይጠይቃል ፡፡ ብዛት ያላቸው ቁጥሮች።

በሁሉም ጥንዶች ላይ የ f (a [i] ፣ a [j]) ድምር በ n ቁጥሮች ብዛትጭንቅላታም መያያዣ መርፌ

ለምሳሌ  

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

ማስረጃ

ጥንድ 3,1 እና 3,1 ጥንድ ብቻ።

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

ማስረጃ

እዚህ በተጨማሪ ሁለት ጥንድ (1, 3) እዚያ አሉ ፡፡

አልጎሪዝም  

  1. ያውጅ ሀ ካርታ እና ያዘጋጁ ውጤት ወደ 0 እና ቁጥጥር 0 ነው.
  2. ድርድርን ከጅምሩ ያቋርጡ i = 0 ወደ እኔ = n,
    1. ውፅዓት + = (i * a [i]) ያድርጉ - ቼክ እና ቼክ + = a [i];
    2. በካርታው ውስጥ አንድ [i] -1 ቁልፍ ሆኖ የሚገኝ መሆኑን ያረጋግጡ።
      1. እውነት ከሆነ ፣ ከዚያ የውጤቱ ውስጥ የካርታው የ [i] -1 እሴት በመጨመር ውጤቱን ያዘምኑ።
      2. በካርታው ውስጥ አንድ [i] +1 ቁልፍ ሆኖ የሚገኝ መሆኑን ያረጋግጡ። እውነት ከሆነ ፣ ከዚያ የውጤቱ ውስጥ የካርታው የ [i] +1 እሴት በማከል ውጤቱን ያዘምኑ።
    3. ከሁኔታዎች መካከል አንዳቸውም የሚያረኩ ከሆነ በቀላሉ የድርድርን ንጥረ ነገር ድግግሞሽ በካርታው ላይ ያሰሉ እና ያከማቹ።
  3. ተመላሽ ውጤት

ማስረጃ

አገኘን ደርድር ኢንቲጀር፣ የእኛ ተግባር ከላይ የተጠቀሰውን ሁኔታ በሚያረካ ድርድር ውስጥ የሚገኙትን ጥንዶች ሁሉ ድምር መፈለግ ነው። ጥንዶቹ አንዳቸውም ቢሆኑ የተሰጠውን ሁኔታ ካላሟሉ በቀላል መንገድ ተመልሰን እንመለሳለን 0. ይህንን ለመፍታት ሀን እንጠቀማለን ካርታ እና በእያንዳንዱ የድርድር አካል ላይ ሁሉንም ክዋኔዎች በአንድ ጊዜ ማከናወን እና ምርታችንን ማዘመን እና እንዲሁም በካርታችን ላይ መፈተሽ ፡፡ በእውነተኛው ምርታችን ላይ ዓይንን የሚጠብቅ ተጨማሪ ተለዋዋጭ እንወስዳለን ፣ እንደ ቼክum ብለን ልንጠራው እንችላለን ፡፡ የውጤት እና ቼክአምን ወደ 0. እናዘጋጃለን ፣ እናም በሁሉም ጥንድ ላይ የ f (a [i], a [j]) ድምር በ n ቁጥሮች ብዛት እናገኛለን ፡፡

ተመልከት
በትክክለኛው ጊዜ ተደጋግሞ ትንሹ ንጥረ ነገር

እስቲ አንድ ምሳሌ እንመልከት-

ለምሳሌ

አር [] = {1, 2, 3, 1, 3} ፣ ውጤት 0 ፣ ቼክሱም 0

  • የ 0 ኛ መረጃ ጠቋሚ ንጥረ ነገር እንመርጣለን ከዚያም በመረጃ ጠቋሚው እንሰራለን ከዚያም እንጨምራለን ፣ እና ቼክሜን በመቀነስ ከዚያ በውጤቱ ውስጥ እንጨምራለን ፣

ውጤት: 0, ቼክሱም: 1

ካርታ {1 = 1} ፣ ማንኛውም ሁኔታ አያረካም ፣ ስለሆነም እሴቱን በካርታው ውስጥ እንጨምረዋለን።

  • ለ 1st የመረጃ ጠቋሚ አካል ፣ ተመሳሳይ ክዋኔ ያካሂዱ ፣ ግን በዚህ ጊዜ ፣ ​​የመጀመሪያውን ከሆነ መግለጫውን ያረካዋል ፣ እና የዘመነውን ውጤት ካገኘን በኋላ እናገኛለን።

የዘመነ ውጤት 0 ፣ ቼክሱም 3

ካርታ {1 = 1, 2 = 1} ፣ በዚህ ጊዜ እንዲሁ ያንን እሴት ከተከሰተበት ጋር በካርታው ውስጥ እንጨምረዋለን ፡፡

  • ለ 2nd ንጥረ ነገር ፣ ልክ እንደበፊቱ የተከናወነ ነው ፣ በዚህ ጊዜ ኤለሜንቱን ያገኛል [i] -1 እና የዘመነ ውጤት አገኘን

የዘመነ ውጤት 2 ፣ ቼክሱም 6

ካርታ {1 = 1, 2 = 1, 3 = 1} ፣ ኤለመንቱን እና ድግግሞሹን በመደመር።

  • ለ 3 ኛ አካል ፣ መግለጫ ከሆነ ሁለተኛውን ያረካዋል ማለት ካርታው እሴቱን + i +1 ከያዘ ይከተላል ፣ ከዚያ የዘመነውን ውጤት ካገኘን በኋላ-

የዘመነ ውጤት: 0 ፣ ቼክሱም 7 ፣ ካርታ {1 = 2, 2 = 1, 3 = 1}

  • መግለጫውን የመጀመሪያውን ካለፈ በኋላ ለ 4 ኛ አካል ፡፡

የዘመነ ውጤት 4 ፣ ቼክሱም 10

ካርታ {1 = 2, 2 = 1, 3 = 2}

እና ውጤቱን እንመልሳለን -4

ኮድ  

በሁሉም ቁጥሮች ጥንድ ላይ የ f (a [i], a [j]) ድምርን ለማግኘት C ++ ኮድ

#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” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው። የሃሽ ማፕ አጠቃቀሙ ፍለጋ / መሰረዝ / ማስገባት ውስጥ እንድናከናውን ያስችለናል ኦ (1). ስለሆነም በሁሉም ጥንድ ጥንድ ላይ የ f (a [i], a [j]) ድምርን ለመፈለግ የጊዜ ውስብስብነት ወደ መስመራዊ ቀንሷል ፡፡

ተመልከት
የቃላት ንድፍ

የቦታ ውስብስብነት

ሆይ (n) የት “N” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው። በሃሽ ማፕ ውስጥ n ቁልፎችን ማስገባት ሊኖርብን ስለሚችል ስለዚህ የቦታ ውስብስብነት መስመራዊ ነው ፡፡