K Boş Slots LeetCode

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon google
alqoritmlər Geyim kodlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutions Sırasız xəritəBaxılıb 33

K Empty Slots, LeetCode'da çox məşhur bir problemdir. Problem ifadəsi buna bənzəyir - Bağ hər birində çiçək olan n yuvadan ibarətdir. Bütün çiçəklər əvvəlcə çiçəklənməmişdir. Verilmişdir array a [] çiçək və k tam ədədi. 0-dan ifadə etdiyimi nəzərə alsaq, i + 1'inci çiçək a [i] günündə çiçək açacaqdır. Məsələn - bir [] = {1, 3, 2} bildirək ki, birinci çiçək 1-ci gün, ikinci çiçək 3-cü gün və üçüncü çiçək 2-ci gün çiçək açacaq deməkdir. be iki çiçəklənmiş çiçək arasındakı çiçəklənməmiş çiçəklər başqa print -1 cavab yoxdursa. Məsələn - ln a [] = {1, 3, 2} və k = 1, çıxış ikinci gündəki kimi 2-dir və üçüncü çiçək k ilə, yəni aralarında 1 çiçəklənməmiş çiçək ilə çiçək açacaqdır.

misal

Input

a [] = {1, 4, 3, 2, 5}

k = 2

Buraxılış

2

Input 

a [] = {1, 2, 3, 4}

k = 1

Buraxılış

-1

Alqoritm

İndi K Empty Slots LeetCode-un problem açıqlamasını bilirik. Beləliklə, çox vaxt almadan bu problemi həll etmək üçün istifadə olunan alqoritmə keçirik.

  1. Bir sıra a və bir k ədədi başlayın.
  2. Hər çiçəyin çiçək açacağı günləri saxlamaq üçün başqa bir sıra günlərə başlayın.
  3. Gün seriyasını sıfırdan başlayaraq i ilə keçin və serialı günlər [a [i]] = i + 1 kimi yeniləyin.
  4. Nəticəni INT_MAX olaraq təyin edin.
  5. Dizini yenidən keçin. Sol və sağ dəyərləri k dəyişikliyi ilə 2 dəyişən arasında saxlayın və maksimumunu tapın.
  6. Hər addımda 1-dən k-yə keçin və günlərin [i + j] maksimum dəyərdən az olub olmadığını yoxlayın və daxili döngəni yandırın.
  7. Bayraq doğrudursa, nəticəni maksimum dəyər olaraq təyin edin.
  8. Nəticə INT_MAX return -1-ə bərabərdirsə, return res.

Həyata keçirilməsi

K Boş Slots LeetCode üçün C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;
int kSlots(int a[], int k, int n) {
    int days[n+1];
    for(int i=0; i<n; i++){
        days[a[i]] = i+1;
    }    
    int res = INT_MAX;    
    n = sizeof(days)/sizeof(days[0]);   
    for(int i=1; i<n; i++){
        int l = days[i];
        int r = days[i+k+1];
        int m1 = max(l, r);
        int m2 = min(l, r); 
        bool flag = true;
        for(int j=1; j<=k; j++){
            if(days[i + j]<m1){
                flag = false;
                break;
            }
        }
        if(flag && m1<res){
            res = m1;
        }
    }
    return res == INT_MAX ? -1 : res;
}
int main(){
  int a[] = {1, 3, 2}; 
  int k = 1;
  int n = sizeof(a)/sizeof(a[0]);
  cout<<kSlots(a, k, n);
  return 0;
}
2

K Boş Yuvalar üçün Java Proqramı LeetCode

class kEmptySlots{
    
    static int kSlots(int[] a, int k) {
        int[] days = new int[a.length + 1];
        
        for(int i=0; i<a.length; i++) {
            days[a[i]] = i+1;
        }
        
        int res = Integer.MAX_VALUE;
        
        for(int i=1; i< days.length-k-1; i++){
            int l = days[i];
            int r = days[i+k+1];
            
            int max = Math.max(l, r);
            int min = Math.min(l, r);
            
            boolean flag = true;
            for(int j=1; j<=k; j++){
                if(days[i + j]<max){
                    flag = false;
                    break;
                }
            }
        
            if(flag && max<res){
                res = max;
            }
        }
    
        return res == Integer.MAX_VALUE ? -1 : res;
    }
    
    public static void main (String[] args){
        int a[] = {1, 3, 2};
        int k = 1;
        System.out.println(kSlots(a, k));
    }
}
2

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi: O (N * K), burada N - verilmiş massivin ölçüsü və K - iki çiçəklənmiş çiçək arasındakı çiçəklənməmiş çiçəklərin sayını göstərən dəyər.

Kosmik Mürəkkəblik: O (N), burada N verilmiş massivin ölçüsüdür. Burada çiçək açan çiçək məlumatlarını saxlamaq üçün bir sıra günlər [n].

References

Şərh yaz

Translate »