程序在Python中按升序删除元素后获取列表的索引

假设我们有一个不同值的列表,并且我们要以非降序删除每个数字。我们必须按删除顺序找到数字索引。

因此,如果输入类似于nums = [4、6、2、5、3、1],那么当我们删除1时,输出将为[5、2、3、0、1、0],因此数组为[ 4,6,2,5,3],然后删除2,数组是[4,6,5,3],然后删除3我们得到[4,6,5],然后删除4我们得到[6,5] ,删除5,[6],最后删除6。

范例(Python)

让我们看下面的实现以更好地理解-

class Solution:
   def solve(self, nums):
      return solve(nums)
def solve(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 < len(left) and j < len(right):
         if nums[left[i]] < nums[right[j]]:
            sorted_inds.append(left[i])
            i += 1
         else:
            sorted_inds.append(right[j])
            larger[right[j]] += len(left) - i
            j += 1
      sorted_inds.extend(left[i:])
      sorted_inds.extend(right[j:])
      return sorted_inds
   larger = [0] * len(nums)
   my_sort(range(len(nums)))
   num_larger_pairs = sorted(zip(nums, larger))
   return [e[1] for e in num_larger_pairs]
ob = Solution()
nums = [4, 6, 2, 5, 3, 1]
print(ob.solve(nums))


输入值

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

输出结果

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


猜你喜欢