สมมติว่าเรามีรายการตัวเลขไม่ติดลบ nums และค่า k ไม่ติดลบ มีการดำเนินการ: เลือกตัวเลขบวกใน nums ลดลง 1 หาจำนวนครั้งน้อยที่สุด ที่ทำให้ทุกคู่ติดกันมีผลรวม <= k ถ้าคำตอบใหญ่ คืนค่า mod 10^9+7
ตัวอย่าง: nums = [4, 6, 2, 5], k = 6 ผลลัพธ์ 5 (ลดเป็น [3, 3, 1, 4] รวม 5 ครั้ง)
ขั้นตอนการแก้ปัญหา (Greedy)
m = 10**9 + 7ans = 0- วนลูป
iจาก 0 ถึงlen(nums)-2:sm = nums[i] + nums[i+1]diff = max(sm - k, 0)nums[i+1] -= diff- ถ้า
nums[i+1] < 0:nums[i+1] = 0 ans += diff
- คืนค่า
ans % m
ตัวอย่างโค้ด Python
m = 10 ** 9 + 7
class Solution:
def solve(self, nums, k):
ans = 0
for i in range(0, len(nums) - 1):
sm = nums[i] + nums[i + 1]
diff = max(sm - k, 0)
nums[i + 1] -= diff
if nums[i + 1] < 0:
nums[i + 1] = 0
ans += diff
return ans % m
ob = Solution()
nums = [4, 6, 2, 5]
k = 6
print(ob.solve(nums, k)) # Output: 5
อินพุต / เอาต์พุต
Input: [4, 6, 2, 5], 6
Output: 5