Giả sử chúng ta có một danh sách các giá trị riêng biệt và chúng ta muốn xóa từng số theo thứ tự không giảm. Chúng tôi phải tìm chỉ số của các con số để xóa chúng.
Vì vậy, nếu đầu vào giống như nums =[4, 6, 2, 5, 3, 1], thì đầu ra sẽ là [5, 2, 3, 0, 1, 0] khi chúng ta xóa 1, vì vậy mảng là [ 4, 6, 2, 5, 3] thì bỏ 2, mảng là [4, 6, 5, 3], bỏ 3 ta được [4, 6, 5], bỏ 4 ta được [6, 5] , loại bỏ 5, [6] và cuối cùng là loại bỏ 6.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một hàm my_sort (). Điều này sẽ giúp tôi kết thúc
- nếu kích thước của inds <=1, thì
- trả lại inds
- sorted_inds:=một danh sách mới
- mid:=kích thước của inds / 2
- left:=my_sort (inds [từ chỉ mục 0 đến giữa]), right:=my_sort (inds [từ chỉ mục giữa đến cuối])
- i:=0, j:=0
- while i
- nếu nums [left [i]]
- chèn trái [i] vào cuối sorted_inds
- i:=i + 1
- nếu nums [left [i]]
- chèn ngay [j] vào cuối sorted_inds
- lớn hơn [phải [j]]:=lớn hơn [phải [j]] + kích thước của trái - i
- j:=j + 1
Ví dụ (Python)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
class Giải pháp:def giải (self, nums):trả về giải quyết (nums) def giải quyết (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Đầu vào
[4, 6, 2, 5, 3, 1]Đầu ra
[5, 2, 3, 0, 1, 0]