Mündəricat
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.