我有以下代码,其中我们有两个唯一整数列表,nums1和nums2;其中nums1是nums2的子集。我们希望比较nums1和nums2的每个元素,并用nums2中的下一个最大整数追加“output_stack”
例如: 输入:nums1=[4,1,2],nums2=[1,3,4,2] 输出:[-1,3,-1] 说明: 对于第一个数组中的数字4,您无法在第二个数组中找到下一个更大的数字,因此输出-1。 对于第一个数组中的数字1,它在第二个数组中的下一个较大的数字是3。 对于第一个数组中的数字2,第二个数组中没有下一个更大的数字,因此输出-1
def nextGreaterElement(nums1, nums2):
nums1 = sorted(nums1)
nums2 = sorted(nums2)
output_stack = []
for i in range(len(nums1)):
for j in range(len(nums2)):
if nums1[i] ==nums2[-1]:
output_stack.append(-1)
elif nums1[i] == max(nums2):
output_stack.append(-1)
elif nums1[i] == nums2[j]:
output_stack.append(nums2[j+1])
else:
output_stack.append(-1)
return(print(output_stack))
nextGreaterElement([2,4],[1,2,3,4])
上面的代码返回了错误的输出[-1,3,-1,-1],我知道原因-这是因为我用j迭代了所有nums2,但这是我知道如何做的唯一方法。有没有办法修改现行守则
我的问题是,如果我去掉了第二个“for”循环,我很难找到一种方法来引用nums2中的“next”索引;有没有一种不使用“for”循环的方法可以做到这一点
我不知道你的代码为什么不起作用,但我想我可以尝试一下自己的版本。可以稍微清理一下,但似乎对您的两个示例有效
下面是代码的工作原理:
首先,我们需要遍历第一个列表中的数字:
然后,我们希望在与第一个点相同的索引处对第二个列表进行切片。我将使用nums1作为[4,1,2]和nums2作为[1,3,4,2]来执行此示例,查看nums1中的“1”
查找切片列表中大于我们正在查看的数字的数字的位置
然后索引nums2列表以返回实际值
在获取列表中的第一个数字之前,我们需要检查数组中是否有任何值
将结果作为numpy数组返回以保持一致性。我最初将结果附加到列表中,因为它们是可变的。我不确定这方面的最佳做法是什么,但这是我的做法
尝试退出else if结构中的第二个for循环:
相关问题 更多 >
编程相关推荐