የአንድ ድርድር ሁለት ንዑስ ንዑስ ክፍሎች ሊኖር የሚችል ልዩነት  


የችግር ደረጃ ጠንካራ
ውስጥ በተደጋጋሚ ተጠየቀ Atlassian ካዴንስ ህንድ Directi ፍሪጅ ቻርጅ ኦፔራ PayU Snapchat ታይምስ በይነመረብ ጎሜ
ሰልፍ ሃሽ መደርደር

እንበል ፣ እኛ አለን ኢንቲጀር ደርድር. የችግሩ መግለጫ “የአንድ ድርድር ሁለት ንዑስ ንዑስ ንዑስ ሊሆኑ የሚችሉ ልዩነቶች” በአንድ ድርድር ሁለት ንዑስ ክፍሎች መካከል ሊኖር የሚችል ከፍተኛ ልዩነት ለማወቅ ይጠይቃል።

ሊከተሏቸው የሚገቡ ሁኔታዎች

  • አንድ ድርድር ተደጋጋሚ አባሎችን ሊይዝ ይችላል ፣ ነገር ግን የአንድ ንጥረ ነገር ከፍተኛ ድግግሞሽ ከ 2 መብለጥ የለበትም።
  • በየራሳቸው ንጥረ ነገሮች ድምር መካከል ያለው ልዩነት ከፍተኛ እንዲሆን ሁለት ንዑስ ክፍሎችን ማድረግ አለብዎት።
  • ሁሉም የድርድሩ አካላት ምንም ንጥረ ነገር ሳይተዉ በሁለቱ ንዑስ ክፍሎች መከፈል አለባቸው።
  • በንዑስ ክፍል ውስጥ ሁለት አካላት ተመሳሳይ መሆን የለባቸውም።

ለምሳሌ  

የአንድ ድርድር ሁለት ንዑስ ንዑስ ክፍሎች ሊኖር የሚችል ልዩነትጭንቅላታም መያያዣ መርፌ

arr[] = {2, 5, -3, -1, 5, 7}
13

ማስረጃ

ንዑስ ንዑስ → (2 ፣ 7 ፣ 5) - (-3 ፣ -1 ፣ 5) = 13

{1, 5, 3, -1, -5, 6}
21

ማስረጃ

ንዑስ ክፍል → (1, 3, 5, 6) - (-5, -1) = 21

አልጎሪዝም  

  1. ሁለት አውጅ ካርታዎች፣ አንዱ ለአዎንታዊ እና አንድ ለአሉታዊ አካል።
  2. አዎንታዊ አካላትን እና ቁጥራቸውን በአንድ ካርታ ውስጥ ያከማቹ ፡፡
  3. ድግግሞሽ 1 ያላቸውን ሁሉንም አዎንታዊ ንጥረ ነገሮችን ማከል እና በውስጡ ማከማቸትዎን ይቀጥሉ ንዑስ ክፍል 1.
  4. አሉታዊውን አካል እና ቁጥሩን በሌላ ካርታ ውስጥ ያከማቹ።
  5. ድግግሞሽ 1 ያላቸውን ሁሉንም አሉታዊ አካላት በመደመር እና በውስጡ ማከማቸቱን ይቀጥሉ ንዑስ ክፍል 2.
  6. ንዑስ ክፍል 1-ንዑስ ክፍል 2 ይመልሱ።
ተመልከት
ተመሳሳይ የቁምፊዎች ስብስብ ያላቸው የቡድን ቃላት

ማስረጃ

አንድ ሰጥተናል ደርድር፣ በሁለት ንዑስ ንዑስ ክፍሎች ድምር መካከል ያለውን ልዩነት ማወቅ አለብን እና ይህም ከፍተኛ መሆን አለበት። እኛ ልንጠቀምበት ነው ካርታ. ሃምሽንግ ይህንን ጥያቄ ለመፍታት ቀልጣፋ መንገድ ይሰጣል ፡፡ ሁለት ካርታዎችን እንጠቀማለን ፡፡ አንደኛው በአዎንታዊ አካላት ላይ ለተከናወኑ ስራዎች እና ለሌላው ደግሞ ለአሉታዊ አካላት ፡፡ አንድ ድርድር ሁለቱንም አዎንታዊ እና አሉታዊ አካላትን ሊይዝ ይችላል ፣ ስለሆነም ያንን ነገር እኛ መያዝ አለብን።

ድርድር እና ካርታ እንይዛለን ፡፡ እያንዳንዱን የአደረጃጀት ንጥረ ነገር እንመርጣለን እና ከ 0. የሚበልጥ መሆኑን እናረጋግጣለን ከዚያም በካርታው ውስጥ ከሚከሰቱት ብዛት ጋር እናከማቸዋለን ፡፡ የአዎንታዊ አካላት ድግግሞሾችን ካከማቸን በኋላ ከ 0 የሚበልጡ እና እንዲሁም 1 ድግግሞሽ ያላቸው ሁሉንም የአንድ እሴቶችን እጨምራለሁ ማለት ነው ፣ ብዙ ወይም ከአንድ ጊዜ በላይ የሚመጡትን አካላት ችላ ማለት አለብን ማለት ነው።

ተመሳሳይ ነገር በአሉታዊ አካላት ይከናወናል እያንዳንዱን የድርጅት ንጥረ ነገር እንመርጣለን እናም በዚህ ጊዜ ከ 0. በታች መሆኑን እናጣራለን በካርታው ውስጥ እናከማቸዋለን (አዎንታዊ ቁጥርን እናሳያለን) ፡፡ ክስተቶች. የአሉታዊ አካላትን ድግግሞሾችን ካከማቸን በኋላ ከ 0 ያነሱ እና እንዲሁም ድግግሞሽ ብቻ የሆኑ ሁሉንም የአንድ እሴቶችን እጨምራለሁ 1. እዚህ በተጨማሪ ፣ ብዙ ጊዜ ወይም ከዚያ በላይ የሚመጡትን አካላት ችላ ማለት አለብን ፡፡ ከአንድ ጊዜ በላይ ፡፡

ተመልከት
ከእያንዳንዱ ቁምፊ ምትክ ጥያቄ በኋላ ፓልንድሮምን ይፈትሹ

የሁሉም አዎንታዊ እና አሉታዊ ንጥረ ነገሮች ድምር ውጤትን ከተከተልን በኋላ ድግግሞሽ 1 ብቻ ያላቸው ንጥረ ነገሮች ፣ የሁለቱን ድምሮች ልዩነት መመለስ አለብን እናም መልሳችን ይሆናል።

ኮድ  

የሁለት ንዑስ ንዑስ ንዑስ ክፍልፋዮች ከፍተኛውን ልዩነት ለማግኘት የ C ++ ኮድ

#include<iostream>
#include<unordered_map>

using namespace std;

int maxDiff(int arr[], int n)
{
    unordered_map<int, int> positiveElement;
    unordered_map<int, int> negativeElement;

    int sumSubset1 = 0, sumSubset2 = 0;
    for (int i = 0; i <= n - 1; i++)
        if (arr[i] > 0)
            positiveElement[arr[i]]++;

    for (int i = 0; i <= n - 1; i++)
        if (arr[i] > 0 && positiveElement[arr[i]] == 1)
            sumSubset1 += arr[i];

    for (int i = 0; i <= n - 1; i++)
        if (arr[i] < 0)
            negativeElement[abs(arr[i])]++;

    for (int i = 0; i <= n - 1; i++)
        if (arr[i] < 0 &&
                negativeElement[abs(arr[i])] == 1)
            sumSubset2 += arr[i];

    return abs(sumSubset1 - sumSubset2);
}
int main()
{
    int arr[] = {2,5,-3,-1,5,7};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum difference found is: " << maxDiff(arr, n);
    return 0;
}
Maximum difference found is: 13

የአንድ ድርድር ሁለት ንዑስ ንዑስ ክፍተቶች ከፍተኛውን ልዩነት ለማግኘት የጃቫ ኮድ

import java.util.HashMap;
class SubsetDifference
{
    public static int getDifference(int arr[], int n)
    {
        HashMap<Integer, Integer> positiveElement=new HashMap<Integer, Integer>();
        HashMap<Integer, Integer> negativeElement=new HashMap<Integer, Integer>();
        int sumSubset1 = 0, sumSubset2 = 0;
        for (int i = 0; i <= n - 1; i++)
        {
            if (arr[i] > 0)
            {
                if(positiveElement.containsKey(arr[i]))
                    positiveElement.put(arr[i],positiveElement.get(arr[i])+1);
                else
                    positiveElement.put(arr[i],1);
            }
        }
        for (int i = 0; i <= n - 1; i++)
            if (arr[i] > 0 && positiveElement.get(arr[i]) == 1)
                sumSubset1 += arr[i];

        for (int i = 0; i <= n - 1; i++)
        {
            if (arr[i] < 0)
            {
                if(negativeElement.containsKey(Math.abs(arr[i])))
                    negativeElement.put(Math.abs(arr[i]),negativeElement.get(Math.abs(arr[i]))+1);
                else
                    negativeElement.put(Math.abs(arr[i]),1);
            }
        }
        for (int i = 0; i <= n - 1; i++)
            if (arr[i] < 0 && negativeElement.get(Math.abs(arr[i]))== 1)
                sumSubset2 += arr[i];

        return Math.abs(sumSubset1 - sumSubset2);
    }
    public static void main(String [] args)
    {
        int arr[] = {2,5,-3,-1,5,7};
        int n = arr.length;
        System.out.println("Maximum difference found is:"+getDifference(arr, n));
    }
}
Maximum difference found is:13

ውስብስብነት ትንተና  

የጊዜ ውስብስብነት

ሆይ (n) የት “N” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው። ሃሽማፕን ስለተጠቀምን በ (1) ውስጥ ማስገባት / መሰረዝ / መፈለግን ማከናወን እንችላለን ፡፡

ተመልከት
ቁጥሮችን እንኳን ቁጥር ያላቸው ቁጥሮች ቁጥር ያግኙ Leetcode Solution

የቦታ ውስብስብነት

ሆይ (n) የት “N” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው።