Bir massivi tərsinə çevirin

An array oxşar elementlərin ardıcıl kolleksiyasıdır. The array sabit ölçülü bir məlumat quruluşudur. Dizilərə sıfırdan başlayan indeks daxil ola bilər. Reversing array bir sıra kimi bütün elementləri düzəltməyə kömək edir, elementləri sondan oxuyuruq. Bir ədəd tam ədədi verdik və onu tərsləşdirməliyik və ya sadəcə bir massivi tərs deyək.

Etmək üçün müxtəlif üsullar var ləğv etmək bir sıra. Aşağıda giriş olaraq bir sıra var və biz bir Array Reverse üçün bir proqram yazmalıyıq.

Giriş Formatı

Massivin ölçüsünü ifadə edən tam bir N ədədi olan birinci sətir.

Bir sıra olan ikinci sətir və ya sadəcə n tam ədədi deyin.

Çıxış formatı

Giriş massivinin əksini çap edin.

Məhdudiyyətlər

  • 1 <= N <= 1000000
  • -1e9 <= a [i] <= 1e9

misal

Input

1 2 3 4 5

Buraxılış

5 4 3 2 1

Bir Dizini Ters çevirmək üçün İki İşarəli Metoddan istifadə edərək 1 yanaşma

İki dəyişən götürürük Başlamaq (bir sıra birinci elementindəki nöqtə) və son (Bir sıra son elementinə işarə). Bir [başlanğıc] və [son] elementini tərs çevirin və sonra artım 1 ilə, azalma son 1 ilə başlayın. Başlanğıc> son şərtini vurana qədər hərəkətə davam edirik. Tətbiqatı güclü bir şəkildə anlamaq üçün aşağıdakı alqoritmə baxın:

Alqoritm

1. Döngəyə qədər Başlamaq azdır son.

2. Göstərilən elementləri dəyişdirməyə davam edin Başlamaqson.

3. Artım Başlamaq və azalma son dəyişən.

4. kimi Başlamaq bərabərdir son və ya daha böyükdür son sonra döngəni dayandıracağıq.

Bir massivi tərsinə çevirin

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
  int n;
  cin>>n;
  int a[n];
  for(int i=0;i<n;i++)
  {
      cin>>a[i];
  }
  int start=0,end=n-1;
  while(start<end)
  {
     swap(a[start],a[end]);
     start++;
     end--;
  }
  for(int i=0;i<n;i++)
  {
    cout<<a[i]<<" ";
  }
  cout<<endl;    
}
6
1 2 3 4 5 6
6 5 4 3 2 1

Bir Array Ters üçün Komplekslik Analizi

Zamanın mürəkkəbliyi

O (N), burada N - massivdə mövcud olan elementlərin sayı. Burada bir döngəni N / 2 dəfə işlədirik.

Kosmik Mürəkkəblik

O (1) heç bir köməkçi sahə istifadə etmədiyimiz üçün serialı dəyişdirmək üçün yalnız başlanğıc və bitiş dəyişənlərindən istifadə edirik.

Recursion istifadə edərək bir massivi tərs etmək üçün yanaşma 2 

Alqoritm

1. Başlama = 0 və bitiş = N-1 qoyun.

2. Parametrlər massivi, massivin ölçüsü, başlanğıc, bitiş olan əks funksiyanı çağırın.

3. Hər zəngdə başlanğıcın sondan böyük olub olmadığını yoxlayırıq.

4. Əgər başlanğıc ondan azdırsa, [başlanğıc] və [son] dəyərlərini dəyişdiririk və başlanğıcın dəyərini artıraraq, sonun qiymətini azaldaraq tərs funksiyanı çağırırıq.

5. Başlanğıc sondan böyükdürsə, prosesi dayandırın və son seriyanı çap edin.

Yanaşma 1 kimi, dəyərləri dəyişdirərək irəli və geriyə doğru irəliləyirik. Ancaq bu vəziyyətdə rekursiyadan istifadə edəcəyik. Stack istifadəsi səbəbindən əlavə yer istifadə edir.

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
void reverse(int a[],int n,int start,int end)
{
  if(start>end)
  {
     return;
  }  
  else
  {
    swap(a[start],a[end]);
    reverse(a,n,start+1,end-1);
  }
}
int main()
{
  int n;
  cin>>n;
  int a[n];
  for(int i=0;i<n;i++)
  {
      cin>>a[i];
  }
  reverse(a,n,0,n-1);  
  for(int i=0;i<n;i++)
  {
    cout<<a[i]<<" ";
  }
  cout<<endl;
}
7
-1 5 3 -234 45622 1000000000 -32213
-32213 1000000000 45622 -234 3 5 -1

Bir Array Ters üçün Komplekslik Analizi

Zamanın mürəkkəbliyi

O (N), burada N - massivdə mövcud olan elementlərin sayı. Burada əks funksiyanı N / 2 dəfə çağırırıq və hər çağırışda O (1) vaxt alan dəyərləri dəyişdiririk.

Kosmik Mürəkkəblik

O (N), çünki rekursiv şəkildə N / 2 funksiyasını geri çağırırıq, yəni yığım ölçümüz N / 2-dir.

STL funksiyasından istifadə edərək bir massivi tərs etmək üçün yanaşma 3

Alqoritm

1. Vektor dəyişənindəki girişi götürün.

2. STL funksiyasını tərs istifadə edin (variable.begin (), variable.end ())

3. Vektoru çap edin.

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
  int n;
        cin>>n;
        vector<int> V;
        for(int i=0;i<n;i++)
        {
             int x;
             cin>>x;
             V.push_back(x);
        }  
  reverse(V.begin(),V.end());  
  for(int i=0;i<n;i++)
  {
    cout<<V[i]<<" ";
  }    
  cout<<endl;
}
4
-100 0 2 100
100 2 0 -100

Bir Array Ters üçün Komplekslik Analizi

Zamanın mürəkkəbliyi

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

Kosmik Mürəkkəblik

O (1), çünki O (1) məkan mürəkkəbliyinə sahib olan tərs () funksiyasından istifadə edirik.

Bu, bir sıra tərs etmək üçün proqramlaşdırma və məntiqi bacarıqlarınızı yoxlamaq istədikləri müsahibələrdə tez-tez verilən bir sualdır. Dizinin tərs alqoritmi səmərəli olmalıdır. Array əks proqramı O (n) zaman mürəkkəbliyində yazılmalı, sonra yalnız həll yolunuz nəzərdən keçiriləcəkdir.

References

Translate »