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.
Mündəricat
Problem bəyanat
Maksimum Ardıcıl problemində ikili bir sıra verilir. Verilən massivdə mövcud olan maksimum ardıcıl sayını tapmaq məcburiyyətindəyik.
Giriş massivində yalnız 0 və 1 olacaqdır.
misal
[1,1,0,1,1,1]
3
Explanation:
İlk iki rəqəm və ya son üç rəqəm ardıcıl 1-dir.
Ardıcıl 1-lərin maksimum sayı 3-dür.
[0,1,0]
1
Explanation:
Ardıcıl 1-lərin maksimum sayı 1-dür.
Yanaşma
Bu problemi həll etmək üçün serialdakı indeksləri ikiyə bölə bilərik loop isə iç içə aşağıdakı alqoritmlə:
1. Keçid zamanı yenilənmiş maksimum ardıcıl 1s-i saxlayacaq dəyişən maksimum yaradın.
2. I indeksli bir dəyişən yaradın və başladın.
3. İndi a döngə zamanı i <massiv ölçüsünə qədər.
4. Döngə daxilində indiki indeksdəki ədədin 1 olub olmadığını yoxlayacağıq. 1 -ə bərabər deyilsə, sadəcə indeksi artırın. Əks təqdirdə, 1 -ə bərabərdirsə, yuva qurun döngə zamanı bir say dəyişənini yaradaraq və 0 ilə başlatın. Ardıcıl olaraq, iç içə olan ardıcıl 1s boyunca hərəkət edin döngə zamanı. yəni num [i] 1 -ə bərabər olarkən travers dizisi, aşağıdakı şəkildəki kimi ardıcıl 1 -lərin sayını artırmağa davam edin:
5. 0 və ya massivin sonu ilə qarşılaşdıqdan sonra, maksimum dəyişəni köhnə dəyərini count dəyişənində saxlanılan cari ardıcıl 1s sayı ilə müqayisə edərək yeniləyin.
6 sonra döngə zamanı maksimum dəyəri qaytarmağı tamamlayır.
Həyata keçirilməsi
Maksimum Ardıcıllar üçün Leitcode Həlli üçün C ++ Proqramı
#include <bits/stdc++.h> using namespace std; int findMaxConsecutiveOnes(vector<int>& nums) { int maximum=0; int i=0; while(i<nums.size()) { int conOnes=0; while(i< nums.size() && nums[i]==1) { conOnes++; i++; } maximum=max(maximum,conOnes); i++; } return maximum; } int main() { vector<int> nums={1,1,0,1,1,1}; cout<<findMaxConsecutiveOnes(nums)<<endl; return 0; }
3
Maksimum Ardıcıllar üçün Leetcode Həlli üçün Java Proqramı
import java.lang.*; class MaxOnes { public static int findMaxConsecutiveOnes(int[] nums) { int maximum=0; int i=0; while(i<nums.length) { int conOnes=0; while(i< nums.length && nums[i]==1) { conOnes++; i++; } maximum=Math.max(maximum,conOnes); i++; } return maximum; } public static void main(String args[]) { int nums[]={1,1,0,1,1,1}; System.out.println(findMaxConsecutiveOnes(nums)); } }
3
Maksimum Ardıcıl Şəxslər üçün Leetcode Həlli üçün Mürəkkəblik Analizi
Zamanın mürəkkəbliyi
O (N): Dizini başlanğıcdan son indeksə qədər gəzirik və hər bir göstəricini yalnız bir dəfə ziyarət edirik. Bu səbəbdən zaman mürəkkəbliyi O (N) xətti olacaqdır.
Kosmik Mürəkkəblik
O (1): Əlavə yer istifadə etmirik, buna görə istifadə olunan yer sabitdir.
