Ardıcıl Leitcode Həllindən Aritmetik Proqresiya edə bilər

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon
alqoritmlər Geyim kodlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutions çeşidləyiciBaxılıb 77

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ıqla Aritmetik Proqresiya edə bilərik" problemində bizə bir sıra verilir, indi bir cədvəl yaratmaq mümkün olubsa cavab verməliyik Aritmetik Proqressiya ardıcıllığı yenidən təşkil edərək.

misal

arr = [3,1,5]
true

Explanation: 1,3,5, ümumi fərqlə bir arifmetik proqressiya əmələ gətirən serialı {2} olaraq düzəldə bilərik, nəticədə çıxış doğrudur.

Ardıcıl Leitcode Çözümündən Aritmetik Proqresiya edə biləcəyiniz yanaşma

Aritmetik seriya, bitişik ədədin fərqinin sabit olduğu bir sıradır. Çox təməl bir yanaşma, sıra sıralamaq və bitişik elementlər arasındakı fərqi yoxlamaq olacaq, Fərq bütün ardıcıl cütlər üçün eynidirsə, bu arifmetik proqressiyadır, əks halda arifmetik proqresiya deyil.

Ardıcıl Leitcode Həllindən Aritmetik Proqresiya edə bilərPin

Sıralama üçün vaxt mürəkkəbliyi nlogn. Massiv üçün axtarış cədvəli yaradaraq zamanın mürəkkəbliyini inkişaf etdirə bilərik.

AP-nin n-ci dövrü = a + (n-1) * d-dir, burada a seriyanın ilk elementidir, n elementlərin sayı və d ümumi fərqdir.

bir AP-nin minimum elementi = a və

bir AP-nin maksimum elementi = a + (n-1) * d belədir

d = (maksimum-minimum) / (n-1).

  1. Dizinin minimum və maksimum elementlərini tapacağıq. Onu istifadə edərək d (ümumi fərq) hesablaya bilərik.
  2. Massiv üçün axtarış cədvəli düzəldin.
  3. İndi ilk elementi və ortaq fərqi bilirik.
  4. A və d ilə əmələ gələn arifmetik seriyanın bütün n elementlərinin axtarış cədvəlində olub olmadığını yoxlayacağıq.
  5. Əgər axtarış cədvəlində bütün elementlər varsa, arifmetik irəliləməni ardıcıllıqla edə bilərik, əks halda ardıcıllıqdan arifmetik proqressiya edə bilmərik.

Həyata keçirilməsi

C ++ kodu Ardıcıllıqdan Aritmetik Proqressiya edə bilər

#include <bits/stdc++.h> 
using namespace std; 
  bool canMakeArithmeticProgression(vector<int>& arr) {
  unordered_set<int> seen;
  int mi = INT_MAX, mx = INT_MIN, n = arr.size();
        for (int a : arr) {
            mi = min(mi, a);
            mx = max(mx, a);
            seen.insert(a);
        }
        int diff = mx - mi;
        if (diff % (n - 1) != 0) {
            return false;
        }
        diff /= n - 1;
        while (--n > 0) {
            if (seen.find(mi)==seen.end()) {
                return false;
            }
            mi += diff;
        }
        return true;
    }
int main() 
{ 
 vector<int> arr = {3,5,1}; 
 cout <<boolalpha;   
 cout<<canMakeArithmeticProgression(arr)<<endl; 
 return 0;
}
true

Sifarişdən Aritmetik Proqressiya edə bilmək üçün Java kodu

import java.util.*; 
public class Tutorialcup {
 public static boolean canMakeArithmeticProgression(int[] arr) {
        Set<Integer> seen = new HashSet<>();
        int mi = Integer.MAX_VALUE, mx = Integer.MIN_VALUE, n = arr.length;
        for (int a : arr) {
            mi = Math.min(mi, a);
            mx = Math.max(mx, a);
            seen.add(a);
        }
        int diff = mx - mi;
        if (diff % (n - 1) != 0) {
            return false;
        }
        diff /= n - 1;
        while (--n > 0) {
            if (!seen.contains(mi)) {
                return false;
            }
            mi += diff;
        }
        return true;
    }
  public static void main(String[] args) {
    int [] arr = {3,5,1}; 
    System.out.println( canMakeArithmeticProgression(arr));
  }
}
true

Ardıcıl Leitcode Həllindən Aritmetik Proqresiya edə biləcəyiniz Mürəkkəblik Analizi

Zaman mürəkkəbliyi

Yuxarıdakı kodun zaman mürəkkəbliyi O (n) çünki axtarış cədvəli yaratmaq üçün massivi gəzirik və hesab cədvəlində hesab seriyalarının bütün elementlərinin olub olmadığını yoxlayırıq. Burada n giriş massivinin ölçüsüdür.

Kosmik mürəkkəblik

Yuxarıdakı kodun kosmik mürəkkəbliyi O (n) çünki serial üçün axtarış cədvəli yaradırıq. Burada n giriş massivinin ölçüsüdür.

References

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