በድርጅት ውስጥ ትልቁን ይፈልጉ እንደዚህ ያለ + b + c = d  


የችግር ደረጃ መካከለኛ
ውስጥ በተደጋጋሚ ተጠየቀ የተከማቸ አማዞን አቅርቦት አፍቃሪዎች አራት ኪይትስ ፍሪጅ ቻርጅ
ሰልፍ ሃሽ

የችግሩ መግለጫ  

አንድ አለዎት እንበል ደርድር of ኢንቲጀሮች. የግብዓት ዋጋዎች ሁሉም የተለዩ አካላት ናቸው። ችግሩ “እጅግ በጣም ብዙ በሆነ ድር ውስጥ ፈልግ እንደዚህ ያለ + b + c = d” ስብስብ ውስጥ ትልቁን ‹d› ንጥረ ነገር ለማወቅ ይጠይቃል ፣ + + + c = d ፣ ሁሉም ንጥረ ነገሮች ከሌላው የተለዩ ናቸው ፡፡

ለምሳሌ  

arr[] = {1, 4, 6, 8, 11 }
11

ማብራሪያ: ሦስቱ ቁጥሮች ሀ ፣ ለ እና ሐ 1 ፣ 4 እና 6 ሲሆኑ ድምርአቸውም 11 ነው ፡፡

arr[] = {2,4,6,10,15 }
No such solution exists.

ማብራሪያ: ሶስት ቁጥሮች ስለሌሉ ያ እስከ አንድ ቁጥር ያጠቃልላል።

አልጎሪዝም  

1. Declare a Map.
2. While traversing through the array.
    1. Add and insert the sum of two elements in a map with their indexes in a Map.
3. Set the number to the minimum value of an integer, which we have to find out.
4. Search for the third number in a map by checking the difference of two numbers is present in a map.
5. If true then check if their indexes should not be the same.
6. Check for the maximum of d and the maximum of arr[i] and arr[j] and store it to d.
7. Return d.

ማስረጃ  

እስቲ አንድ ምሳሌ እንመልከት ኢንቲጀር ደርድር ልዩ ቁጥሮችን ያቀፈ። የእኛ ተግባር ቁጥሩን በእንደዚህ ዓይነት መንገድ የሚያጠቃልሉ ሦስት ቁጥሮች አሉ ፡፡ ልንጠቀምበት ነው ሃምሽንግ. ሀሺንግ ቀልጣፋ መፍትሄ ይሰጣል ፡፡ ድርድርን በማለፍ ሁለት ድርድር አባሎችን በአንድ ጊዜ ይውሰዱ እና የእነዚህን ጥንዶች ድምር በየራሳቸው ኢንዴክሶች ለማርካት ያከማቹ ፡፡

ተመልከት
የተደረደሩ ድርድሮች Leetcode መፍትሄን ያዋህዱ

ጥንድ ጥንድ እናከማቻለን ምክንያቱም እኛ እየፈለግን ነው d ፣ እንደዚህ ያለ + b + c = d። ከዚህ ይልቅ እኛ + b = d - c ን እንፈልጋለን። ስለዚህ በመጀመሪያ እኛ ጥንድ እና የእነሱ ጠቋሚዎችን ስናከማች ፡፡ በካርታው ውስጥ ያለው d - c ያለበትን ንጥረ ነገር ‘d’ ለመፈተሽ እንችላለን ፡፡ ይህ ድርድርን በማቋረጥ እና በመቀጠል ሁለት ንጥረ ነገሮችን በአንድ ጊዜ በማንሳት ሊከናወን ይችላል። የሁለቱም አካላት ልዩነት ይፍጠሩ እና በካርታው ውስጥ ካለ ያንን ልዩነት ይፈልጉ። ይህ እውነት ሆኖ ከተገኘ አሁን ያሉትን ሁለት አካላት በአንድ ማውጫ ላይ ከቀዳሚው ጥንዶች ጋር በተመሳሳይ ማውጫ ላይ መሆን የለባቸውም ይፈትሹ ፡፡

ይህ ማናቸውም ንጥረ ነገሮች በተመሳሳይ መረጃ ጠቋሚ ላይ መደገም የለባቸውም የሚለውን ለመፈተሽ አስፈላጊ ነው ፣ የተደጋገመውን ቁጥር በ ፣ በ ፣ በ እና መ ውስጥ ከግምት ውስጥ ማስገባት ይቻላል ፣ ግን የእነሱ አመልካቾች ማለት በተመሳሳይ ኢንዴክስ ላይ ያለው ቁጥር አይታሰብም ፡፡ ስለዚህ እኛ እነዚያን ማውጫዎች ሰረቀነት ማረጋገጥ አለብን ፡፡ አሁን ፣ ከፍተኛውን የ arr [i] እና arr [j] ን ማወቅ እና በመካከላቸው ያለውን ከፍተኛውን ለማወቅ እና እስከ መ መ ያንን ከፍተኛ እስከ d ማረጋገጥ አለብን ፡፡ ምክንያቱም ፣ አራተኛውን ቁጥር መ መ ማግኘት አለብን ፣ ስለሆነም መ በ ሀ ፣ ለ ፣ ሐ እና መ መካከል ሁል ጊዜ የሚልቅ ስለሆነ ከፍተኛውን የድርድር አባላትን መፈለግ አለብን።

አፈጻጸም  

የ C ++ ፕሮግራም በድር ውስጥ ትልቁን ለመፈለግ እንደዚህ ያለ + b + c = d

#include<iostream>
#include<unordered_map>

using namespace std;

int getSumThreeNumber(int arr[], int n)
{
    unordered_map<int, pair<int, int> > MAP;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            MAP[arr[i] + arr[j]] = { i, j };
        }
    }
    int d_number = INT_MIN;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            int third = abs(arr[i] - arr[j]);

            if (MAP.find(third) != MAP.end())
            {
                pair<int, int> obj = MAP[third];
                if (obj.first != i && obj.first != j && obj.second != i && obj.second != j)
                    d_number = max(d_number, max(arr[i], arr[j]));
            }
        }
    }
    return d_number;
}
int main()
{
    int arr[] = { 1,4,6,8,11 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int res = getSumThreeNumber(arr, n);
    if (res == INT_MIN)
        cout << "No such solution exists";
    else
        cout << res;
    return 0;
}
11

የጃቫ ፕሮግራም ትልቁን በ ‹ድርድር› ውስጥ ለማግኘት ‹+ b + c = d

import java.util.HashMap;

class CheckIndex
{
    int i, j;

    CheckIndex(int i, int j)
    {
        this.i = i;
        this.j = j;
    }
    int checkI()
    {
        return i;
    }

    int checkJ()
    {
        return j;
    }
}

class sumOfThreeElementToD
{

    public static int getSumThreeNumber(int[] arr, int n)
    {
        HashMap<Integer, CheckIndex> map = new HashMap<>();

        for (int i = 0; i < n - 1; i++)
        {
            for (int j = i + 1; j < n; j++)
            {
                map.put(arr[i] + arr[j], new CheckIndex(i, j));
            }
        }

        int d_number = Integer.MIN_VALUE;

        for (int i = 0; i < n - 1; i++)
        {
            for (int j = i + 1; j < n; j++)
            {
                int third = Math.abs(arr[i] - arr[j]);

                if (map.containsKey(third))
                {
                    CheckIndex ci = map.get(third);
                    if (ci.checkI() != i && ci.checkI() != j && ci.checkJ() != i && ci.checkJ() != j)
                    {
                        d_number = Math.max(d_number, Math.max(arr[i], arr[j]));
                    }
                }
            }
        }
        return d_number;
    }
    public static void main(String[] args)
    {
        int arr[] = { 1, 4, 6, 8, 11 };
        int n = arr.length;
        int output = getSumThreeNumber(arr, n);
        if (output == Integer.MIN_VALUE)
            System.out.println("No such solution exists");
        else
            System.out.println(output);
    }
}
11

በድርጅት ውስጥ ትልቁን ለማግኘት ውስብስብነት ትንተና እንደዚህ ያለ + b + c = d  

የጊዜ ውስብስብነት

ኦ (n2የት “N” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው። በ O (1) ጊዜ ውስጥ የማስገባት ፍለጋን እና ሌሎች ክዋኔዎችን የሚፈቅድ ሃሽማፕን ስለተጠቀምን ይህንን ውስብስብነት አሳክተናል ፡፡

ተመልከት
ሁለት ያልተነጣጠሉ ድርድሮች ከተሰጡት ድምር x ሁሉንም ጥንድ ያግኙ

የቦታ ውስብስብነት

ኦ (n2) የት “N” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው። የሃሽማፕ የግብዓት የተለያዩ ንጥረ ነገሮችን ጥንድ መጨመር ስለሚያከማች ፡፡ በዚህ ምክንያት አልጎሪዝም አራት ማዕዘናዊ የቦታ ውስብስብነት አለው ፡፡

ማጣቀሻ