130 / 205
LeetCode · MediumO'rta20 ball· ~25 daqiqa

Maximum Product Subarray

Sizga butun sonlardan iborat nums massivi berilgan. Eng katta ko'paytmaga ega bo'lgan uzluksiz qism-massivni (subarray) toping va uning ko'paytmasini qaytaring.

Qism-massiv ketma-ket joylashgan elementlardan iborat. Massivda manfiy sonlar va nol bo'lishi mumkin; javob har qanday elementli qism-massiv uchun 32-bitli butun songa sig'adi.

example.go
func solve(nums []int) int {
    // ...
}

Misollar

kod
Input: nums = [2,3,-2,4]
Output: 6
Tushuntirish: [2,3] qism-massivi eng katta ko'paytmani (6) beradi.
kod
Input: nums = [-2,0,-1]
Output: 0
kod
Input: nums = [-2,3,-4]
Output: 24

Maslahatlar

  1. Manfiy sonlar borligi sababli faqat "eng katta joriy ko'paytma"ni kuzatish yetarli emas — manfiy son eng kichik (eng manfiy) ko'paytmani ham eng kattaga aylantirib yuborishi mumkinligini o'ylab ko'ring.
  2. Har bir qadamda ham joriy maksimal, ham joriy minimal ko'paytmani saqlab boring; joriy son manfiy bo'lsa ikkalasini almashtirib qo'ying, so'ng har birini (joriy son bilan davom ettirish yoki joriy sondan qaytadan boshlash) orasidan kattasini/kichigini tanlab yangilang va shu jarayondagi eng katta maksimal qiymatni umumiy javob sifatida saqlang.