在Python中找到第一个比其他列表中元素小的数组的最小长度的程序
假设我们有一个数字列表nums,我们想将该列表分成两个部分part1和part2,使得part1中的每个元素都小于或等于part1中的每个元素。我们必须找到可能的最小part1长度(非0长度)。
如果输入类似于nums = [3, 1, 2, 5, 4],那么输出将是3,因为我们可以将列表分成part1 = [3, 1, 2]和part2 = [5, 4]。
为了解决这个问题,我们将遵循以下步骤 –
- p :nums中的最小值
- s :0
- 对于i从0到nums大小的范围,做
- 如果nums [i]与p相同,那么
- s := i
- 退出循环
- 如果nums [i]与p相同,那么
- p :nums [从索引为0到s的子列表的最大值]
- ans :s
- 对于i从s + 1到nums大小的范围,做
- 如果nums [i]
- ans :i
-
返回ans + 1
范例
让我们看一下以下实现,以获得更好的理解-
def solve(nums):
p = min(nums)
s = 0
for i in range(len(nums)):
if nums[i] == p:
s = i
break
p = max(nums[: s + 1])
ans = s
for i in range(s + 1, len(nums)):
if nums[i] < p:
ans = i
return ans + 1
nums = [3, 1, 2, 5, 4]
print(solve(nums))
输入
[3, 1, 2, 5, 4]
输出
3