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

โปรแกรมเพื่อส่งคืนจำนวนองค์ประกอบขนาดเล็กที่ด้านขวาของรายการที่กำหนดใน Python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums เราจะสร้างรายการใหม่ โดยที่แต่ละองค์ประกอบในรายการใหม่คือจำนวนขององค์ประกอบที่เล็กกว่าทางด้านขวามือขององค์ประกอบนั้นในรายการอินพุตดั้งเดิม

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[4, 5, 9, 7, 2] ผลลัพธ์จะเป็น [1, 1, 2, 1, 0] เนื่องจากมี 1 องค์ประกอบเล็กกว่าทางด้านขวาของ 4 คือองค์ประกอบที่เล็กกว่า 1 รายการทางด้านขวาของ 5 มีองค์ประกอบขนาดเล็กกว่า 2 รายการทางด้านขวาของ 9 องค์ประกอบที่เล็กกว่า 1 รายการทางด้านขวาของ 7 ไม่มีองค์ประกอบที่เล็กกว่าทางด้านขวาของ 2

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

  • res :=รายการใหม่ inc :=รายการใหม่

  • ในขณะที่ nums ไม่ว่างเปล่าให้ทำ

    • num :=ลบองค์ประกอบสุดท้ายออกจาก nums

    • แทรกซ้ายดัชนีมากที่สุดเพื่อแทรก num inc ที่ส่วนท้ายของความละเอียด

    • เรียงลำดับรายการหลังจากใส่ num ใน inc

  • คืนค่ารายการ res[จากดัชนี 0 ถึงจุดสิ้นสุด]

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

ตัวอย่าง

import bisect
class Solution:
   def solve(self, nums):
      res, inc = [], []
      while nums:
         num = nums.pop()
         res.append(bisect.bisect_left(inc, num))
         bisect.insort(inc, num)
      return res[::-1]
ob = Solution()
nums = [4, 5, 9, 7, 2]
print(ob.solve(nums))

อินพุต

[4, 5, 9, 7, 2]

ผลลัพธ์

[1, 1, 2, 1, 0]