Bir Dizinin Elementlərinin Ardıcıl olub olmadığını yoxlayın

Çətinlik səviyyəsi Asan
Tez-tez soruşulur google Über
GeyimBaxılıb 1166

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

Bir sıra verildikdə, a elementlərinin olub olmadığını yoxlayın array ardıcıl. Burada ardıcıl elementlər serialdakı bütün elementləri götürdükdə ardıcıl bir ardıcıllıq yaratmaq üçün lazım olduqları deməkdir.

misal

Input

arr [] = {65,68,66,64,67}

Buraxılış

massiv ardıcıl elementləri ehtiva edir

burada massivdəki bütün elementlər artan sırada olduğu üçün ardıcıl olur, yəni 64,65,66,67,68

Yanaşma 1: Minimum və Maksimum Elementdən istifadə

Alqoritm

1. Əvvəlcə serialdakı minimum və maksimum elementi tapın, müvafiq olaraq maksimum və minimum tam dəyərlərə min və max iki dəyişən təyin edin.
Massivin ölçüsündən az olanadək, massivdəki hər elementi seçin
a. Element maksimum elementdən böyükdürsə, seçilmiş elementə maksimum elementi təyin edin
b. Element min elementdən azdırsa, seçilmiş elementə min element təyin edin.
2. Özləri daxil olmaqla max və min arasındakı elementlərin sayı massivin ölçüsünə bərabərdirsə, davam edin.
Massivin ölçüsündən az olanadək, massivdəki hər elementi seçin
a. Element təkrarlanırsa, bütün elementlərin ardıcıl olmadığını yazdırın və dayandırın.
b. Döngü pozulmadısa, hamısı ardıcıl elementlərdir

Həyata keçirilməsi

Bir sıra elementlərinin ardıcıl olub olmadığını yoxlamaq üçün 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 min = INT_MAX , max = INT_MIN ;
  for(int i = 0 ; i < N; i++) //find minimum and maximum element
  {
    if(arr[i] > max)
      max = arr[i];
    if(arr[i] < min)
      min = arr[i];
  }
  if(max-min+1==N) // if the number of elements between max and min including themselves equals size of array then proceed
  {
    bool visited_nodes[N]={0};
    
    for(int i=0;i<N;i ++)
      {
        if(visited_nodes[arr[i] -  min] == 1) //it means the element is repeated so we cant get consecutive elements
          {
           cout << " Not all consecutive elements \n" ;
           return 0;  
          }  
        else
          visited_nodes[arr[i] - min] = 1;
      }
    cout << "Consecutive element set\n";
    return 0;
  }
  
  cout << " Not all consecutive elements \n" ;
  
  return 0;
}

Bir Array elementlərinin ardıcıl olub olmadığını yoxlamaq üçü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 n = sr.nextInt();
        int a[] = new int[n];
        for(int i=0;i<n;i++)
        {
            a[i] = sr.nextInt();
        }
        int min = 10000000 , max = -10000000 ;
        for(int i=0;i<n;i++) //find minimum and maximum element
        {
          if(a[i] > max)
            max = a[i];
          if(a[i] < min)
            min = a[i];
        }
        if(max-min+1==n) // if the number of elements between max and min including themselves equals size of array then proceed
        {
          int visited_nodes[] = new int [n];
          for(int i=0;i<n;i++)
          {
              visited_nodes[i]=0;
          }
          for(int i=0;i<n;i ++)
          {
              if(visited_nodes[a[i] -  min] == 1) //it means the element is repeated so we cant get consecutive elements
              {
                 System.out.println("Not all consecutive elements");
                 i=n;  
              }  
              else
                visited_nodes[a[i] - min] = 1;
          }
          System.out.println("Consecutive element set");
        }
        else
        System.out.println(" Not all consecutive elements");
    }
}
5
3 5 2 4 6
Consecutive element set

Bir sıra elementlərinin ardıcıl olub olmadığını yoxlamaq üçün mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (n) burada n - verilən massivdə mövcud olan elementlərin sayı. Burada massivin minimum və maksimum elementini bir keçiddə tapırıq. Və sonra bitişik ardıcıllığı yoxlayın.

Kosmik Mürəkkəblik

O (1) çünki burada heç bir köməkçi yerdən istifadə etmirik. Yuxarıda göstərilən alqoritm bizi daimi kosmik mürəkkəbliyə aparır.

Yanaşma 2: Çeşidləmə istifadə

Alqoritm

1. Dizidəki elementləri sıralayın
2. Sıralanmış massivin sonuna qədər xətti tarama edin
a. Mövcud elementlə növbəti element arasındakı fərq 1-dən başqa bir şeydirsə, bütün elementləri ardıcıl yazdırmayın
başqa,
b. Bütün fərqlər 1-dirsə, bütün elementləri ardıcıl olaraq çap edin.

Həyata keçirilməsi

Bir sıra elementlərinin ardıcıl olub olmadığını yoxlamaq üçün 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);
    for(int i=0 ; i < N - 1; i++)
    if(arr[i+1] > arr[i] + 1)
    {
        cout << "Not all consecutive elements\n";
        return 0;
    }
    cout<<"Consecutive element set\n";
    return 0;
}

Bir Array elementlərinin ardıcıl olub olmadığını yoxlamaq üçü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 n = sr.nextInt();
        int a[] = new int[n];
        for(int i=0;i<n;i++)
        {
            a[i] = sr.nextInt();
        }
        Arrays.sort(a);
        int temp=0;
        for(int i=0;i<n-1;i++)
        if(a[i+1]>a[i]+1)
        {
            System.out.println(" Not all consecutive elements");
            temp=1;
            i=n;
        }
        if(temp==0)
        System.out.println("Consecutive element set");
    }
}
6
1 2 3 5 6 7
Not all consecutive elements  

Bir sıra elementlərinin ardıcıl olub olmadığını yoxlamaq üçün mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (nlogn) burada n - verilən massivdə mövcud olan elementlərin sayı. Burada O (nlogn) zaman mürəkkəbliyinə malik inbuild sort () funksiyasından istifadə edirik.

Kosmik Mürəkkəblik

O (1) çünki burada heç bir köməkçi yerdən istifadə etmirik. Yuxarıda göstərilən alqoritm bizi daimi kosmik mürəkkəbliyə aparır.

References

Crack Sistemi Dizayn Müsahibələri
Translate »