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

โปรแกรมรับดัชนีของรายการหลังจากลบองค์ประกอบจากน้อยไปมากใน Python


สมมติว่าเรามีรายการของค่าที่แตกต่างกัน และเราต้องการลบตัวเลขแต่ละตัวโดยไม่ลดจำนวนลง เราต้องหาดัชนีของตัวเลขตามลำดับการลบทิ้ง

ดังนั้น หากอินพุตเท่ากับ nums =[4, 6, 2, 5, 3, 1] เอาต์พุตจะเป็น [5, 2, 3, 0, 1, 0] ขณะที่เราลบ 1 ดังนั้นอาร์เรย์จะเป็น [ 4, 6, 2, 5, 3] จากนั้นลบ 2, อาร์เรย์คือ [4, 6, 5, 3] จากนั้นลบ 3 ที่เราได้รับ [4, 6, 5] จากนั้นลบ 4 ที่เราได้รับ [6, 5] , ลบ 5, [6] และสุดท้ายลบ 6

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

  • กำหนดฟังก์ชัน my_sort() นี้จะใช้เวลา inds
  • ถ้าขนาดของ inds <=1 แล้ว
    • ผลตอบแทน inds
  • sorted_inds :=รายการใหม่
  • กลาง :=ขนาดของ inds / 2
  • left :=my_sort(inds[from index 0 to mid]), right :=my_sort(inds[from index mid to end])
  • i :=0, j :=0
  • ในขณะที่ i <ขนาดด้านซ้ายและ j <ขนาดด้านขวา ทำ
    • ถ้า nums[left[i]]
    • แทรก left[i] ที่ส่วนท้าย sorted_inds
    • ผม :=ผม + 1
  • มิฉะนั้น
    • แทรก right[j] ที่ส่วนท้าย sorted_inds
    • ขนาดใหญ่กว่า[right[j]] :=ใหญ่กว่า[right[j]] + ขนาดด้านซ้าย - i
    • j :=j + 1
  • แทรก left[จากดัชนี i ถึงปลาย] ลงใน sorted_inds
  • แทรก right[จากดัชนี j ถึงปลาย] ลงใน sorted_inds
  • ส่งคืน sorted_inds
  • จากวิธีหลัก ให้ทำดังนี้ -
  • ขนาดใหญ่ขึ้น :=รายการขนาดใหม่และเติม 0
  • my_sort(ช่วง 0 ถึงขนาดของ nums)
  • num_larger_pairs :=ทำคู่สำหรับแต่ละอัน (nums, ใหญ่กว่า) และจัดเรียงมัน
  • ส่งคืนรายการด้วย e[1] สำหรับ e ทั้งหมดใน num_larger_pairs
  • ตัวอย่าง (Python)

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

    คลาสโซลูชัน:def แก้(ตัวเอง, nums):return Solve(nums)def dissolve(nums):def my_sort(inds):if len(inds) <=1:return inds sorted_inds =[] mid =len( inds) // 2 left, right =my_sort(inds[:mid]), my_sort(inds[mid:]) i =j =0 while i  

    อินพุต

    [4, 6, 2, 5, 3, 1]

    ผลลัพธ์

    [5, 2, 3, 0, 1, 0]