สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และอีกค่าหนึ่งคือ k ให้เราพิจารณาการดำเนินการที่เราเพิ่มองค์ประกอบทีละรายการ เราสามารถทำได้มากที่สุด k ครั้ง เราต้องหาค่าของจำนวนที่เกิดขึ้นบ่อยที่สุดที่เราจะได้รับ หากมีคำตอบมากกว่าหนึ่งข้อ ให้เลือกจำนวนที่น้อยที่สุดที่เป็นไปได้
ดังนั้น หากอินพุตเป็น nums =[1, 0, 0, 0, 8, 8, 8, 8] k =8 ผลลัพธ์จะเป็น 8 เนื่องจากเราสามารถเพิ่ม 1, 7 ครั้งเพื่อให้ได้ 8 และ เพิ่ม 0 เป็น 1 ใดๆ ดังนั้นเราได้ [8, 1, 0, 0, 8, 8, 8, 8] ผลลัพธ์ที่ได้คือ 8
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- เรียงเลขรายการ
- ต่ำ :=0, สูง :=0
- dist :=0, ดีที่สุด :=0
- ret :=-1
- ในขณะที่ <ขนาดของ nums สูง
- ถ้า high> 0 และ nums[high] ไม่เหมือนกับ nums[high - 1] แล้ว
- dist :=dist +(สูง - ต่ำ) *(nums[high] - nums[high - 1])
- สูง :=สูง + 1
- ในขณะที่ dist> k ทำ
- dist :=dist - nums[สูง - 1] - nums[ต่ำ]
- ต่ำ :=ต่ำ + 1
- ถ้าสูง-ต่ำ> ดีที่สุดแล้ว
- ดีที่สุด :=สูง - ต่ำ
- ret :=nums[high - 1]
- คืนสินค้า
- ถ้า high> 0 และ nums[high] ไม่เหมือนกับ nums[high - 1] แล้ว
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
โค้ดตัวอย่าง
class Solution: def solve(self, nums, k): nums.sort() low, high = 0, 0 dist = 0 best = 0 ret = -1 while high < len(nums): if high > 0 and nums[high] != nums[high - 1]: dist += (high - low) * (nums[high] - nums[high - 1]) high += 1 while dist > k: dist -= nums[high - 1] - nums[low] low += 1 if high - low > best: best = high - low ret = nums[high - 1] return ret ob = Solution() nums = [1, 0, 0, 0, 8, 8, 8, 8] k = 8 print(ob.solve(nums, k))
อินพุต
[1, 0, 0, 0, 8, 8, 8, 8], 8
ผลลัพธ์
8