สมมติว่ามีรายการตัวเลขชื่อ nums และค่า k ให้พิจารณาการดำเนินการที่ลบ 1 ออกจากสมาชิกใดก็ได้ในรายการ เราสามารถทำได้ k ครั้ง ต้องการหาค่าสูงสุดที่น้อยที่สุดในรายการหลังจากดำเนินการ k ครั้งดังกล่าว
ตัวอย่าง: nums = [3, 4, 6, 5], k = 6 ผลลัพธ์คือ 3 เพราะสามารถลด 4 ลง 1 ครั้ง, 6 ลง 3 ครั้ง, 5 ลง 2 ครั้ง ได้ [3, 3, 3, 3]
ขั้นตอนการแก้ปัญหา
- เรียง
numsจากมากไปน้อย - กำหนด
i = 0,curr = nums[0] - วนลูป بينما
k > 0:- ขยับ
iขณะที่nums[i] == curr - ถ้า
k >= i:k -= icurr -= 1
- มิฉะนั้น คืนค่า
curr
- ขยับ
- คืนค่า
curr
ตัวอย่างโค้ด
class Solution:
def solve(self, nums, k):
nums.sort(reverse=True)
i = 0
curr = nums[0]
while k > 0:
while i < len(nums) and nums[i] == curr:
i += 1
if k >= i:
k -= i
curr -= 1
else:
return curr
return curr
ob = Solution()
nums = [3, 4, 6, 5]
k = 6
print(ob.solve(nums, k))
อินพุต
[3, 4, 6, 5], 6
เอาต์พุต
3