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

โปรแกรมค้นหาผลต่างสูงสุดของจำนวนใด ๆ และจำนวนที่น้อยกว่าถัดไปใน Python


สมมติว่าเรามีรายการของตัวเลขที่เรียกว่า nums เราต้องหาความแตกต่างสูงสุดที่มีอยู่ระหว่างตัวเลขใดๆ กับจำนวนที่น้อยกว่าถัดไป เป้าหมายของเราคือการแก้ปัญหานี้ในเวลาเชิงเส้น

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[14, 2, 6, 35, 12] ผลลัพธ์จะเป็น 21 เนื่องจาก 35 และ 14 มีความแตกต่างมากที่สุดคือ 21

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • max_val :=สูงสุดของ nums, min_val :=ขั้นต่ำของ nums

  • ถ้า max_val เหมือนกับ min_val แล้ว

    • คืนค่า 0

  • เดลต้า :=(max_val − min_val) / (ขนาดของ nums − 1)

  • min_map :=แผนที่ว่าง (ถ้าค่าบางค่าไม่มีให้คืนค่าเป็น inf)

  • max_map :=แผนที่ว่าง (หากบางค่าไม่มีค่าส่งคืนเป็น −inf)

  • res :=0, idx :=0

  • สำหรับแต่ละ num เป็น num ทำ

    • idx :=พื้นของ ((num − min_val) / delta)

    • max_map[idx] :=สูงสุดของ max_map[idx] และ num

    • min_map[idx] :=ขั้นต่ำของ min_map[idx] และ num

  • ก่อนหน้า :=min_val

  • สำหรับฉันในช่วง 0 ถึงขนาดของ nums − 1 ทำ

    • ถ้า min_map[i] ไม่เหมือนกับ inf แล้ว

      • res :=สูงสุดของ res และ (min_map[i] − ก่อนหน้า)

      • ก่อนหน้า :=max_map[i]

  • ผลตอบแทน

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

ตัวอย่าง

from collections import defaultdict
import math
class Solution:
   def solve(self, nums):
      max_val = max(nums)
      min_val = min(nums)
      if max_val == min_val:
         return 0
      delta = (max_val − min_val) / (len(nums) − 1)
      min_map = defaultdict(lambda: float("inf"))
      max_map = defaultdict(lambda: float("−inf"))
      res = 0
      idx = 0
      for num in nums:
         idx = math.floor((num − min_val) / delta)
         max_map[idx] = max(max_map[idx], num)
         min_map[idx] = min(min_map[idx], num)
      prev = min_val
      for i in range(len(nums)):
         if min_map[i] != float("inf"):
            res = max(res, min_map[i] − prev)
            prev = max_map[i]
      return res
ob = Solution()
nums = [14, 2, 6, 35, 12]
print(ob.solve(nums))

อินพุต

[14, 2, 6, 35, 12]

ผลลัพธ์

21