Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาจำนวนที่เกิดขึ้นมากที่สุดหลังจากเพิ่มขึ้น k ใน python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า 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]
    • คืนสินค้า

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

โค้ดตัวอย่าง

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