Menu
CoddyTech

Sliding Window Maximum

لديك مصفوفة من الأعداد الصحيحة nums وحجم نافذة k. تبدأ نافذة تضم k قيمة متتالية من الطرف الأيسر وتتحرك نحو اليمين موضعًا واحدًا في كل مرة، حتى تصل حافتها اليمنى إلى القيمة الأخيرة. أعد أكبر قيمة في النافذة عند كل موضع، من اليسار إلى اليمين: n-k+1 قيمة لمصفوفة طولها n.

الدالة

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
المصفوفة التي تنزلق النافذة فوقها
kinteger
عدد القيم في كل نافذة
تُرجعinteger-array
أكبر قيمة في كل نافذة، من النافذة الواقعة في أقصى اليسار إلى النافذة الواقعة في أقصى اليمين

القيود

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • تحتوي النتيجة على nums.length-k+1 قيمة، واحدة لكل نافذة، بالترتيب من اليسار إلى اليمين.

أمثلة

المدخلات
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
المخرجات
[12, 12, 12, 8, 8]
الشرح
يوجد 12 ضمن النوافذ الثلاث الأولى، لذا تكون الإجابة في كل منها 12. بعد خروجه، يكون 8 هو أكبر قيمة في كل من [3, 8, 5] و[8, 5, 1].
challenge icon

سؤال إضافي

هل يمكنك إنشاء طابور يدعم إضافة قيمة إلى الخلف، وإزالة القيمة الموجودة في الأمام، وقراءة قيمته القصوى الحالية، وكل ذلك في زمن مستهلك O(1)؟

إعادة ضبط الشيفرة
def maxSlidingWindow(nums, k):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

الإخراج المتوقع

[12, 12, 12, 8, 8]