Mündəricat
Problem bəyanat
Verilən üçdə bütün ümumi elementləri tapın seriallar problem, üç sıralanmış sıra verdik və hər üç massivdə mövcud olan ümumi rəqəmləri tapmalısınız.
misal
Input:
ar1 [] = {1, 5, 10, 20, 40, 80}
ar2 [] = {6, 7, 20, 80, 100}
ar3 [] = {3, 4, 15, 20, 30, 70, 80, 120}
Çıxış:
20 80
Izahat
Burada sıralanmış bir sıra verdik və bütün massivlərdə ümumi elementləri tapmalıyıq. Dizilərin başlanğıc indeksini bildirən üç göstəricini alırıq. İndi şərti yoxlayın ki, hər hansı bir element başqalarına nisbətən azdırsa, o göstərici dəyərini artırın və göstərici növbəti elementə işarə etməsin. Hər hansı bir massivdə sona çatdığımız yerə qədər bu şəkildə hərəkət edirik. Bir sıra sonuna vursaq, təkrarlamanı dayandırın və nəticəni çap edin. İndi möhkəm anlaşma üçün aşağıdakı alqoritmi yoxlayın.
Ortaq elementləri tapmaq üçün alqoritm
1. Müvafiq olaraq üç massivin başlanğıc indeksinə işarə edən i, j və k dəyişənləri kimi üç işarə götürün.
2. Dəyişənlərin göstərdiyi üç rəqəmin eyni olub olmadığını yoxlayın
3. Eynidirsə, dəyəri yazdırın və üç dəyişəni artırın, bu səbəbdən müvafiq massivlərdə irəliləyin.
4. Başqa kiçik olanlara işarə edən dəyişəni artırın.
5. Bir sıra tamamilə keçərsə, qalan iki massivi açıq şəkildə yoxlayırıq.
6. Əgər iki massiv keçilirsə, onda üçüncü cərgənin çəkilməmiş hissəsini çap edin, çünki onun artıq sıralanmış olduğunu bilirik.
Həyata keçirilməsi
Ümumi elementləri tapmaq üçün C ++ proqramı
#include <bits/stdc++.h> using namespace std; int main() { int arr1[] = {2, 8, 15 , 20, 35, 45, 100}; int arr2[] = {5, 9, 20, 45, 110}; int arr3[] = {3, 4, 15, 20, 30, 45, 80, 120}; int n1 = sizeof(arr1)/sizeof(arr1[0]); int n2 = sizeof(arr2)/sizeof(arr2[0]); int n3 = sizeof(arr3)/sizeof(arr3[0]); int i = 0 , j = 0 , k = 0; // i ,j and k are pointing at the start of 1st , 2nd and 3rd array resepectively. while(i < n1 and j < n2 and k < n3) { if(arr1[i] == arr2[j] and arr3[k] == arr1[i]) //if all elements are same then { cout << arr1[i] <<" "; i++; j++; k++; } //increase the array index variable of those which are small else if(arr1[i] < arr2[j]) i++; else if(arr2[j] < arr3[k]) j++; else k++; } return 0; }
Ortaq Elementləri tapmaq üçün 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 n1 = sr.nextInt(); int n2 = sr.nextInt(); int n3 = sr.nextInt(); int a[] = new int[n1]; int b[] = new int[n2]; int c[] = new int[n3]; for(int i=0;i<n1;i++) { a[i] = sr.nextInt(); } for(int i=0;i<n2;i++) { b[i] = sr.nextInt(); } for(int i=0;i<n3;i++) { c[i] = sr.nextInt(); } int i = 0 , j = 0 , k = 0; // i ,j and k are pointing at the start of 1st , 2nd and 3rd array resepectively. while((i < n1) && ((j < n2) && (k < n3))) { if(a[i] == b[j] && c[k] == a[i]) //if all elements are same then { System.out.print(a[i]+" "); i++; j++; k++; } //increase the array index variable of those which are small else if(a[i] < b[j]) i++; else if(b[j] < c[k]) j++; else k++; } } }
7 5 8 2 8 15 20 35 45 100 5 9 20 45 110 3 4 15 20 30 45 80 120
20 45
Mürəkkəblik təhlili
Zaman Mürəkkəbliyi - O (maks (M, N, P)) burada M, N və P üç massivin ölçüləridir
Kosmik Mürəkkəblik - O (1) çünki burada yalnız bəzi dəyişənlərdən istifadə edirik.