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
  • 左:= my_sort(inds[从索引0到中间]),右:= my_sort(inds[从索引中间到最后])
  • I :=0, j :=0
  • 当i
  • 如果nums[left[i]]
  • 将left[i]插入sorted_inds的末尾
  • i:= i+1
    • 否则,
  • 将right[j]插入sorted_inds的末尾

  • larger[right[j]]:=larger[right[j]]+left的大小-i
  • j := j + 1

    • 将left[从索引i到结尾]插入sorted_inds
    • 将right[从索引j到结尾]插入sorted_inds
    • 返回sorted_inds
    • 从主方法中执行以下操作−
    • larger:=大小为nums的新列表,并用0填充
    • my_sort(num_range 0 to size of nums)
    • num_larger_pairs:为每个(nums,larger)创建一对并对它们进行排序
    • 返回包含num_larger_pairs中的所有e[1]的列表

示例(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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程