【发布时间】:2022-01-20 04:54:08
【问题描述】:
我在一次在线面试测试中得到了这个问题。我无法让所有的测试用例都通过。我正在寻找如何解决它。
给定两个数组A 和B,每个数组由N 整数组成。我们希望将它们合并到数组C 中,这样对于每个索引K(从0 到N - 1),C[K] 可以是A[K] 或B[K]。例如,数组A = [1, 2, 4, 3] 和B = [1, 3, 2, 3] 可以通过以下任意一种方式合并:
[1,2,4,3] [1,3,4,3] [1,2,2,3] [1,3,2,3]
我们的目标是获得C,使得C 中不存在的最小正整数尽可能小。在我们示例的排列中,该值将分别为5、2、4 和4。所以,我们的解决方案是第二种排列,结果是2。
更多示例:
-
A = [1, 2, 4, 3]和B = [1, 3, 2, 3],答案:2 -
A = [3, 2, 1, 6, 5]和B = [4, 2, 1, 3, 3],答案:3我们可以创建C = [4, 2, 1, 6, 5] -
A = [1, 2]和B = [1, 2],答案:3因为C = [1, 2]是唯一可能的排列。
约束:
- 输入数组大小,
1 < N < 10^5 0 < A[i], B[i] <= 10^5- 输入数组大小相等。
我的方法:
我贪婪地比较了两个数组并将两个元素中较大的一个推入名为 C 的新向量中。然后对其进行迭代以找到第一个丢失的正元素。我想将两个元素的最大值推到答案的逻辑中存在一些缺陷。一些隐藏的测试用例失败了。
伪代码:
input A,B
for i = 0 to N-1:
C[i] = max(A[i], B[i])
sort(C)
h = 0
for i = 0 to N-1:
if C[i] - h > 1:
return h+1
h = C[i]
return h+1
【问题讨论】:
-
嘿,这不是我的作业,我是一位经验丰富的 SDE。我在一次在线面试评估中得到了这个问题,但无法正确回答。在这里询问如何解决这个问题。
-
听起来你写了一个解决方案,这个解决方案有一些问题。也许您想发布该代码并解释您遇到了什么问题。
-
@khelwood,我贪婪地比较了两个数组并将两个元素中较大的一个推入名为 C 的新向量中。然后对其进行迭代以找到第一个丢失的正元素。我想将两个元素的最大值推到答案的逻辑中存在一些缺陷。一些隐藏的测试用例失败了。
-
@GauravSetia 在 cmets 中描述您的代码远不如在您的问题中发布您的代码有用。
-
(@vish4071:嗯,它现在重新打开了。我的看法:如果你没有从错误的角度开始,那是微不足道的。)
标签: arrays algorithm data-structures