Ardıcıllığı artırmaq üçün minimum svoplar


JavaBaxılıb 75

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

"Ardıcıllığı artırmaq üçün minimum svoplar" sizə eyni ölçülü n [a] və b [] iki sıra verildiyini bildirir. Hər iki serialın ciddi şəkildə artması üçün a serialının elementlərini b dizisi ilə dəyişdirin. Eyni indekslərdəki elementləri dəyişdirə bilərsiniz, yəni a [i] yalnız b [i] ilə dəyişdirilə bilər. Buna görə tapmalıyıq minimum sayı a [] və b [] dizilərini ciddi şəkildə artırmaq üçün tələb olunan svoplar. Cavab yoxdursa -1 yazın.

misal

Ardıcıllığı artırmaq üçün minimum svoplarPin

a[ ] = {2, 3, 7, 5}

b[ ] = {1, 2, 4, 11}
1

İzah: a [] -dakı üçüncü elementi b [] -dəki üçüncü elementlə əvəz edə bilərik ki, bu da hər iki massivi ciddi şəkildə artıracaq.

a[ ] = {1, 2, 5, 4, 9, 8}

b[ ] = {1, 2, 3, 6, 7, 11}
2

İzahat; 5 -ci elementi dəyişdirdiyimiz üçün. Hər iki serial artıq ciddi şəkildə artan qaydada düzülmüşdür.

a[ ] = {2, 1}

b[ ] = {1, 2}
-1

İzah: a [] massivinin elementlərini b [] ilə dəyişdirməyin heç bir yolu olmadığı üçün ciddi şəkildə artan qaydada düzüləcəklər. Beləliklə, cavab olaraq -1 qaytarırıq.

Yanaşma

Ardıcıllığı artıran problem yaratmaq üçün Minimum svoplar alqoritmi

1. Initialize two nonempty arrays a[ ] and b[ ] of the integer type and of the same size n.
2. Similarly, initialize an integer variable count as 0.
3. Traverse through the array elements starting from 1 till n-1.
4. Check, if the element at current index in given array a[ ] is less than or equal to the element at current index-1 in given array a[ ] or the element at current

verilmiş massivdə indeks

 b[ ] is less than or equal to the element at current index-1 in given array b[ ], swap the array element with another array element at same index and increment the count by 1.
5. After that, traverse again from 1 to n-1 and check again if the element at current index in given array a[ ] is less than or equal to the element at current index-1 in given array a[ ] or the element at current index in given array b[ ] is less than or equal to the element at current index-1 in given array b[ ], return -1.
6. Return count.

Beləliklə, burada əvvəlcə seriallar və onları işə salın. Bundan sonra, mövcud elementin biot dizilərindəki son elementdən ciddi şəkildə böyük olub olmadığını yoxlayırıq. Bu şərt yerinə yetirilərsə, irəli gedirik. Ancaq şərt təmin edilmədikdə, elementləri dəyişdiririk. Bu nöqtədə svopların sayını artırırıq. Bütün dizi keçdikdən sonra hər iki dizinin ciddi şəkildə artan bir şəkildə təşkil edildiyini yoxlayırıq? Svopların sayını qaytarırlarsa, -1 qaytarırıq. Bu, bacarmadığımızı göstərir hər iki massivi təşkil edən elementləri yenidən təşkil edin ciddi şəkildə artır.

Kodu

Ardıcıllığı artırmaq üçün minimum svop proqramı olan C ++ proqramı

#include <bits/stdc++.h>
using namespace std;

int minSwap(int a[], int b[], int n){
    int count = 0;
    for(int i=1; i<n; i++){
        if((a[i]<=a[i-1])||(b[i]<=b[i-1])){
            swap(a[i],b[i]);
            count++;
        }
    }
    for(int i=1; i<n; i++){
        if((a[i]<=a[i-1])||(b[i]<=b[i-1])){
            return -1;
        }
    }
    return count;
}

int main() {
  int a[] = {1, 2, 5, 4, 9, 8};
  int b[] = {1, 2, 3, 6, 7, 11};
  int n = sizeof(a)/sizeof(a[0]);
  cout<<minSwap(a, b, n);
  return 0;
}
2

Ardıcıllığı artırmaq üçün minimum svop Java proqramı

class Swap{
    int minSwap(int a[], int b[], int n){
        int count = 0;
        for(int i=1; i<n; i++){
            if((a[i]<=a[i-1])||(b[i]<=b[i-1])){
                a[i]=a[i]+b[i];
                b[i]=a[i]-b[i];
                a[i]=a[i]-b[i];
                count++;
            }
        }
        for(int i=1; i<n; i++){
            if((a[i]<=a[i-1])||(b[i]<=b[i-1])){
                return -1;
            }
        }
        return count;
    }
  public static void main (String[] args){
    int a[] = {1, 2, 5, 4, 9, 8};
    	int b[] = {1, 2, 3, 6, 7, 11};
    	int n = a.length;
    	Swap s = new Swap();
    	System.out.println(s.minSwap(a, b, n));
  }
}

2

 

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (n) burada n var verilmiş massivdəki elementlərin sayı a [].

Kosmik Mürəkkəblik

O (1) istifadə etdiyimiz üçün daimi əlavə yer.

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