Məzmuna keçin
  • Kateqoriyalar
  • Ən yeni
  • Teqlər
  • Populyar
Yığmaq
Brend loqosu
  1. Əsas səhifə
  2. Kompüter elmi
  3. Problem həlli yanaşması
  4. Sliding window nümunəsi

Sliding window nümunəsi

Planlaşdırılıb Sabitlənib Kilidlənib Köçürülüb Problem həlli yanaşması
slidingwindowpatternproblemsolving
2 Yazı 1 Yazarlar 36 Baxış
  • Ən köhnədən yeniyə
  • Ən yenidən köhnəyə
  • Ən çox səs
Cavab ver
  • Mövzu olaraq cavablandır
🔑 Daxil ol
Bu mövzu silindi. Yalnız mövzu idarəçiliyi imtiyazlarına malik olan istifadəçilər onu görə bilər.
  • codexC Oflayn
    codexC Oflayn
    codex
    üzərində yazmışdı sonuncu dəfə codex tərəfindən redaktə edilib
    #1

    Sliding window nümunəsi bir “pəncərə” yaratmaqdan ibarətdir. Bu “pəncərə” ya bir massivdəki elementlər qrupu, ya da bir rəqəm ola bilər. Müəyyən şərtlərə əsasən “pəncərə” genişlənə və ya bağlana bilər (və ya yeni bir “pəncərə” yaradıla bilər).

    Bu nümunə, massivdə və ya sətirdə məlumat alt dəstini izləmək üçün çox faydalıdır.


    Problem

    Bir maxSubarraySum funksiyası yazın. Bu funksiya tam ədədlərdən ibarət bir massiv və n adlı bir rəqəm qəbul etməlidir. Funksiya massivdə ardıcıl n elementin maksimum cəmini tapmalıdır.


    Naiv həll

    Bu üsul massivdəki bütün mümkün n uzunluqlu alt massivləri yoxlayır və onların cəmini hesablayır.

    Zaman mürəkkəbliyi: O(n²)

    function maxSubarraySum(array, num) {
      if (num > array.length) return null;
    
      let max = -Infinity;
      for (let i = 0; i < array.length - num + 1; i++) {
        let temp = 0;
    
        for (let j = 0; j < num; j++) {
          temp += array[i + j];
        }
    
        if (temp > max) {
          max = temp;
        }
      }
    
      return max;
    }
    
    maxSubarraySum([1, 2, 5, 2, 8, 1, 5], 4); // 17
    

    Çatışmazlıqlar:

    🔴 Hər bir alt massiv üçün n dəfə toplanma əməliyyatı aparırıq.
    🔴 Böyük massivlər üçün performans çox aşağı olur.


    Sliding window həlli

    Bu üsulda bir pəncərə (window) istifadə edirik və onu hərəkət etdiririk.

    Məntiq:

    1. Əvvəlcə ilk n elementin cəmini hesablayırıq.
    2. Sonra bu cəmi tədricən yeniləyirik:
      • Yeni elementi əlavə edirik.
      • Əvvəlki pəncərədən çıxan elementi çıxırıq.
    3. Ən böyük cəmi tapırıq.

    Zaman mürəkkəbliyi: O(n)

    function maxSubarraySum(array, num) {
      let maxSum = 0;
      let tempSum = 0;
      if (num > array.length) return null;
    
      for (let j = 0; j < num; j++) {
        maxSum += array[j];
      }
    
      tempSum = maxSum;
    
      for (let i = num; i < array.length; i++) {
        tempSum = tempSum - array[i - num] + array[i];
        maxSum = Math.max(maxSum, tempSum);
      }
    
      return maxSum;
    }
    
    maxSubarraySum([1, 2, 5, 2, 8, 1, 5], 4); // 17
    

    Üstünlüklər:

    ✅ O(n²) əvəzinə O(n) mürəkkəbliklə işləyir.
    ✅ Daha az yaddaş istifadə edir.
    ✅ Böyük massivlər üçün daha effektivdir.


    Nəticə

    Sliding window nümunəsi ardıcıl verilənləri analiz edərkən çox güclü üsuldur. Bu metod sürətli və yaddaş baxımından effektiv həllər yaratmağa imkan verir.

    Bu yanaşma aşağıdakı hallarda xüsusilə faydalıdır:
    ✔ Ardıcıl ən böyük və ya ən kiçik məbləği tapmaq
    ✔ Sətirlərdə və massivlərdə xüsusi ardıcıllıqları izləmək
    ✔ Məlumat axınını optimallaşdırmaq

    1 cavab Son cavab
    • codexC codex bu mövzunu -də sabitlədi
    • codexC Oflayn
      codexC Oflayn
      codex
      üzərində yazmışdı sonuncu dəfə tərəfindən redaktə edilib
      #2

      Aşağıda LeetCode platformasında bu nümunə ilə həll edilə bilinən problemlərin siyahısı aşağıdakı kimidir. Əgər bildiyiniz problemlər varsa aşağıda əlavə edə bilərsiniz:

      • 643. Maximum Average Subarray I
      • 3. Longest Substring Without Repeating Characters
      • 438. Find All Anagrams in a String
      • 413. Arithmetic Slices
      • 219. Contains Duplicate II
      • 209. Minimum Size Subarray Sum
      • 187. Repeated DNA Sequences
      • 30. Substring with Concatenation of All Words

      Bütün problemlərin siyahısını isə buradan baxa bilərsiz.

      1 cavab Son cavab
      Cavab ver
      • Mövzu olaraq cavablandır
      🔑 Daxil ol
      • Ən köhnədən yeniyə
      • Ən yenidən köhnəyə
      • Ən çox səs




      Bilik paylaşdıqca artan bir sərvətdir
      • Daxil ol

      • Sizin hesabınız yoxdur? Qeydiyyatdan keç

      • Axtarış etmək üçün daxil olun və ya qeydiyyatdan keçin.
      • İlk yazı
        Son yazı
      0
      • Kateqoriyalar
      • Ən yeni
      • Teqlər
      • Populyar