Verilən Üç Çeşidlənmiş Cərgədə bütün ümumi elementləri tapın

Çətinlik səviyyəsi Asan
Tez-tez soruşulur MAQ
GeyimBaxılıb 607

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.

References

Translate »