在 Python 中查找将分区数组分为不相交间隔的程序

在 Python 中查找将分区数组分为不相交间隔的程序

假设我们有一个名为 nums 的数组,我们必须将它划分为两个不同的子数组,分别称为 left 和 right,使得−

  • 左子数组中的每个元素都小于或等于右子数组中的每个元素。

  • 左右子数组非空。

  • 左子数组具有可能最小的大小。

我们必须找出这样分区后 left 的长度。

因此,如果输入是 nums = [5,0,3,8,6],则输出将是 3,因为 left 数组将是 [5,0,3],而 right 子数组将是 [8,6]。

为解决此问题,我们将遵循以下步骤−

  • mx := null,temp := null,nmx := null

  • temp2 := 0

  • 对于 nums 中的每个元素 i,执行以下操作

    • 如果 mx 与 null 相同,则
      • mx := i

      • nmx := i

      • temp := temp2

      • temp2 := temp2 + 1

      • 进入下一次迭代

    • 如果 i≥mx,则

      • temp2 := temp2 + 1

      • 如果 i>nmx,则

      • nmx := i

      • 进入下一次迭代

    • 否则,

      • temp := temp2

      • temp2 := temp2 + 1

      • mx := nmx

      • 进入下一次迭代

  • 返回 temp+1

示例

让我们看以下实现,以更好地理解−

def solve(nums):
   mx = None
   temp = None
   nmx = None
   temp2 = 0

   for i in nums:

      if(mx==None):
         mx = i
         nmx = i
         temp = temp2
         temp2+=1
         continue

      if(i>=mx):
         temp2+=1
         if(i>nmx):
            nmx = i
         continue

      else:
         temp = temp2
         temp2+=1
         mx = nmx
         continue

   return temp+1

nums = [5,0,3,8,6]
print(solve(nums))

输入

[5,0,3,8,6]

输出

3

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程