在 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
-
进入下一次迭代
- 如果 mx 与 null 相同,则
-
返回 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