እኩል እና ያልተለመዱ ቁጥሮች ይከፋፍሉ  


የችግር ደረጃ ቀላል
ውስጥ በተደጋጋሚ ተጠየቀ የተከማቸ LinkedIn MakeMyTrip Paytm
ሰልፍ መደርደር

የችግሩ መግለጫ  

አንድ አለዎት እንበል ኢንቲጀር ደርድር. ጎዶሎዎቹ እና ቁጥራቸው እንኳን በሁለት የድርድር ክፍሎች እንዲከፈሉ “እኩል እና ያልተለመዱ ቁጥሮች ይከፋፍሉ” የሚለው ችግር ድርድርን እንደገና ለማስተካከል ይጠይቃል። እኩል ቁጥሮች ወደ ግራው ድርድር እና ያልተለመዱ ቁጥሮች ወደ ድርድሩ በስተቀኝ በኩል ይዛወራሉ ፣

ለምሳሌ  

arr[]={ 2,4,5,1,7,8,9,7}
2 4 8 1 7 5 9 7

ማብራሪያ-ሁሉም ንጥረ ነገሮች እንኳን ያልተለመዱ ነገሮች ከመሆናቸው በፊት ይቀመጣሉ ታይም በተሰጠው ግቤት ውስጥ እንደነበረው ተመሳሳይ ቅደም ተከተል ይከተላል ፡፡

እኩል እና ያልተለመዱ ቁጥሮች ለመለያየት ስልተ ቀመር  

1. Set i = -1, j = 0.
2. While j is not equal to n(where n is the length of the array),
    1. Check if arr[j] is even or odd if it is even
        1. Do i++, and swap the values of arr[i] and arr[j] respectively.
    2. Increase the value of j by 1.
3. Print the array.

ማስረጃ

ኢንቲጀር ድርድር ሰጥተናል ፡፡ ድርድርን በሁለት ክፍሎች እንደገና እንድናደራጅ ተጠይቀናል። አንድ ክፍል እኩል ቁጥሮች ያሉት ሲሆን ሌላኛው ደግሞ ያልተለመዱ ቁጥሮች ናቸው ፡፡ በተሰጠው ድርድር ውስጥ ይህንን ማድረግ አለብን ፡፡ እንደዚህ ያሉት ቁጥሮች እንኳን ወደ ድርድሩ ግራ በኩል እንዲዛወሩ መደረግ አለባቸው ፡፡ እና ያልተለመዱ ቁጥሮች ወደ ድርድሩ በስተቀኝ በኩል መዛወር አለባቸው። ለዚህም እያንዳንዱን የድርጅት አካላት እንፈትሻለን ፡፡ እሱ እንኳን ቢሆን ወይም ካልሆነ ፣ ቁጥሩም ቢሆን ከዚያ እኛ የሰልፍውን የግራ ጎን እናጎትተዋለን። በቁጥር እንኳን ይህን ክዋኔ ከፈጸሙ በኋላ ፡፡ ሁሉም ያልተለመዱ ቁጥሮች በራስ-ሰር ወደ ድርድሩ በስተቀኝ በኩል ይቀጥላሉ።

ተመልከት
ከፍተኛውን ንጥረ ነገር ያግኙ

ከዚያ ለአንድ ነጠላ ድርድር ሁለት የመረጃ ጠቋሚ እሴቶችን በመያዝ ድርደራውን እናቋርጣለን ፡፡ አንደኛው ለመደበኛ አቋራጭ ሲሆን ሌላኛው ደግሞ ለቁጥሮች ጠቋሚ ማውጫ ጭምር ነው ፡፡ ድርድርን በጄ እሴት እናልፋለን። እና ቁጥሮች (ቁጥር) አንዳቸውም ቢሆኑ እንኳን ቢሆን ያረጋግጡ [አር] እኩል ቢሆን ፡፡ ከዚያ በአር [i] ልዋውጠው እንለውጣለን። እኛ የምንጨምረው የድርጅት ዋጋ [j] እኩል ሆኖ ሲገኝ ብቻ ነው። ስለዚህ ምንም እንኳን ዋጋ ያላቸው ቁጥሮች እንኳን ባናገኝም የጄ ዋጋን በመጨመር እንቀጥላለን ፡፡ እና ከዚያ እኩል ቁጥር ካገኘን ፡፡ ከዚያ ያልተለመደ ቁጥር ይሆናል ተብሎ ከነበረው ከአር [i] ጋር እንለዋወጥን ፡፡

ቁጥሮቹ እንኳን ሲገኙ በድርድሩ ውስጥ ብቻ ይለዋወጣል። እና በእርግጥ ፣ እሱ ባልተለመደ ቁጥር ወይም በራሱ ይቀየራል። ከነዚህ ሁሉ ክዋኔዎች በኋላ የውጤቱን ድርድር እናተምበታለን ፡፡

እኩል እና ያልተለመዱ ቁጥሮች ይከፋፍሉ

ኮድ  

እኩል እና ያልተለመዱ ቁጥሮች ለመለያየት የ C ++ ኮድ

#include<iostream>

using namespace std;

void getArrangedEvenOdd(int arr[], int n)
{

    int i = -1, j = 0;
    while (j != n)
    {
        if (arr[j] % 2 == 0)
        {
            i++;
            swap(arr[i], arr[j]);
        }
        j++;
    }
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

int main()
{
    int arr[] = { 2,4,5,1,7,8,9,7};
    int n = sizeof(arr) / sizeof(int);
    getArrangedEvenOdd(arr, n);
    return 0;
}
2 4 8 1 7 5 9 7

የጃቫ ኮድ እኩል እና ያልተለመዱ ቁጥሮች ለመለያየት

public class rearrangeEvenOdd
{
    public static void getArrangedEvenOdd( int arr[], int n)
    {

        int i = -1, j = 0;
        while (j != n)
        {
            if (arr[j] % 2 == 0)
            {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            j++;
        }
        for (int k = 0; k < n; k++)
            System.out.print(arr[k] + " ");
    }
    public static void main(String args[])
    {
        int arr[] = { 2,4,5,1,7,8,9,7};
        int n = arr.length;
        getArrangedEvenOdd (arr, n);
    }
}
2 4 8 1 7 5 9 7

ውስብስብነት ትንተና  

የጊዜ ውስብስብነት

ሆይ (n) የት “N” በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ብዛት ነው። እዚህ ላይ ጠቋሚው j ከኤን ጋር እኩል እስካልሆነ ድረስ ድርድርን ተላልፈናል ማለት ነው ፡፡ ያ ማለት አንድ ጊዜ በድርጊቱ ላይ ድርድርን አልፈናል ማለት ነው ፡፡ እና ስለዚህ የመስመር ጊዜ ውስብስብነት።

ተመልከት
3 ድምር

የቦታ ውስብስብነት

ኦ (1) ተጨማሪ ቦታ ስለማያስፈልግ ፡፡ አልጎሪዝም ራሱ ቋሚ ቦታን ብቻ ይወስዳል ነገር ግን ፕሮግራሙ በአጠቃላይ መስመራዊ ቦታን ይወስዳል።