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

Minimum Operations to Reduce X to Zero

Sizga butun sonlardan iborat nums massivi va butun son x berilgan.

Bir operatsiyada siz massivning eng chapidagi yoki eng o'ngidagi elementni olib, x dan ayirasiz. Maqsad: x ni aynan 0 ga teng qilish.

Agar imkon bo'lsa, bu ishni qilish uchun zarur bo'lgan minimal operatsiyalar sonini qaytaring, aks holda -1 qaytaring.

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

Misollar

kod
Input: nums = [1,1,4,2,3], x = 5
Output: 2
Tushuntirish: Oxiridan ikki element olamiz: 3 va 2. 5 - 3 - 2 = 0. 2 operatsiya.
kod
Input: nums = [5,6,7,8,9], x = 4
Output: -1
kod
Input: nums = [3,2,20,1,1,3], x = 10
Output: 5

Maslahatlar

  1. Chapdan va o'ngdan elementlar olishni to'g'ridan-to'g'ri simulyatsiya qilish o'rniga, masalani teskarisiga o'girib ko'ring: "chetlardan olib x ni 0 qilish" — o'rtada qoladigan eng uzun qism-massivning yig'indisi umumiy_yig'indi - x ga teng bo'lishini topishga teng.
  2. target = umumiy_yig'indi - x ni hisoblang (agar manfiy bo'lsa -1); so'ng o'zgaruvchan oynani (sliding window) ishlatib, yig'indisi aynan target ga teng bo'lgan eng uzun uzluksiz qism-massivni toping (oyna yig'indisi target dan oshsa chap chetni siljiting); javob esa len(nums) - shu eng uzun oyna uzunligi bo'ladi.