สมมติว่าเรามีรายการของค่าที่แตกต่างกัน และเราต้องการลบตัวเลขแต่ละตัวโดยไม่ลดจำนวนลง เราต้องหาดัชนีของตัวเลขตามลำดับการลบทิ้ง
ดังนั้น หากอินพุตเท่ากับ 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
- ถ้า nums[left[i]]
- มิฉะนั้น
- แทรก right[j] ที่ส่วนท้าย sorted_inds
- ขนาดใหญ่กว่า[right[j]] :=ใหญ่กว่า[right[j]] + ขนาดด้านซ้าย - i
- j :=j + 1
ตัวอย่าง (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]