Bir serialda 0s 1s və 2s sırala

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Çiy kərpic Amazon Piyada çox yol qət eləmək MakeMyTrip MAQ microsoft Morgan Stanley Ola Cabs Paytm Qualcomm SAP Laboratoriyaları Snapdeal Walmart Laboratoriyaları Yatra
Geyim Cür çeşidləyiciBaxılıb 339

Problem bəyanat

Elementlərinin olduğu N elementi olan bir sıra verilmişdir array 0,1 və ya 2-dir. Bir sıra içərisində 0s 1s və 2s-i ayırın və ya ayırın. Birinci yarıda bütün sıfırları, ikinci yarıda olanları və üçüncü yarıda ikiləri təşkil edin.

misal

Input

22

0 1 2 0 1 1 1 1 1 0 1 2 1 0 2 2 2 0 1 2 0 1 XNUMX

Buraxılış

0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 XNUMX

Yanaşma 1

Alqoritm

1. Sadəcə 3 ölçülü bir count_array yaradın və massivin bütün elementlərini sıfır vəziyyətinə gətirin.
2. count_array massiv elementi i indeksinin baş vermə sayını təsvir edir.
3. Verilən massivi keçin və 0 artım əldə etsək, count_array-ın 0-ci indeksi və buna bənzər şəkildə 1-ci və 2-ci indeksin count_array dəyərini artıraraq 1 və 2 üçün edin.
4. Nəhayət 0, 1 və 2 saylarını count_array elementinin dəyərindən çox dəfə çap edin.

Bir Arrayda 0s 1s və 2s Sort üçün tətbiq

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N;//size of the array
    cin>>N;
    int arr[N];
    for(int i=0;i<N;i++)
    {
      cin>>arr[i];
    }
    int cnt[3]={0};//hashing approach
    for(int i=0;i<N;i++)
    cnt[arr[i]]++;//increase the count of that index 
    for(int i=0;i<3;i++)
    for(int j=0;j<cnt[i];j++)//print that index as many times its value is
      cout<<i<<" ";
  return 0;
}

Java Proqramı

import java.util.Arrays;
import java.util.Scanner;
class sum
{
    public static void main(String[] args)  
    { 
        Scanner sr = new Scanner(System.in);
        int n = sr.nextInt();
        int a[] = new int[n];
        for(int i=0;i<n;i++)
        {
            a[i] = sr.nextInt();
        }
        int cnt[] = new int [3];//hashing approach
        cnt[0]=0;cnt[1]=0;cnt[2]=0;
        for(int i=0;i<n;i++)
        cnt[a[i]]++;//increase the count of that index 
        for(int i=0;i<3;i++)
        for(int j=0;j<cnt[i];j++)//print that index as many times its value is
            System.out.print(i+" ");
       }
}
22
0 1 2 0 1 1 1 1 1 0 1 2 1 0 2 2 2 0 1 2 0 1
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi 

O (N) burada n massivin ölçüsüdür. Burada massivi gəzirik və eyni tip elementləri sayırıq.

Kosmik Mürəkkəblik

O (1) çünki burada daimi yerdən istifadə edirik.

Yanaşma 2

Alqoritm

1. Sadəcə serialı sıralayın (Heap / Merge sortunu istifadə edərək və ya sort () STL funksiyasından istifadə edin).
2. Sadəcə sıralanmış massivi çap edin.

Bir Arrayda 0s 1s və 2s Sort üçün tətbiq

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N;//size of the array
    cin>>N;
    int arr[N];
    for(int i=0;i<N;i++)
    {
      cin>>arr[i];
    }
    sort(arr,arr+N);//sort the array simply
    for(int i=0;i<N;i++)
    cout<<arr[i]<<" ";
    return 0;
}

Java Proqramı

import java.util.Arrays;
import java.util.Scanner;
class sum
{
    public static void main(String[] args)  
    { 
        Scanner sr = new Scanner(System.in);
        int n = sr.nextInt();
        int a[] = new int[n];
        for(int i=0;i<n;i++)
        {
            a[i] = sr.nextInt();
        }
        Arrays.sort(a);
        for(int j=0;j<n;j++)
            System.out.print(a[j]+" ");
     }
}
10
0 1 2 0 1 1 1 1 1 0
0 0 0 1 1 1 1 1 1 2

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (NlogN) nlogn zaman mürəkkəbliyi olan inbuild sort funksiyasından istifadə etdiyimiz üçün.

Kosmik Mürəkkəblik

O (1) çünki burada heç bir köməkçi yerdən istifadə etmirik.

References

Translate »