查找数组中是否至少有一次从1到K的所有数字

时间:2015-09-22 20:23:26

标签: c++ algorithm

昨天我在C ++上进行了一次面试测试,我不得不在下面的代码中找到错误。

算法接收输入以非递减顺序和整数K排序的整数向量。如果向量仅包含1和k之间的所有数字至少一次,则算法返回true,否则返回false: / p>

([1,1,2,3,3,4],4) - >真

([1,1,3],3) - >假

这是实施:

router.post('/add')

我无法找到错误/错误。有人能告诉我这段代码中的bug是什么?

2 个答案:

答案 0 :(得分:0)

最终检查应该是OR,因为任何一个条件都是返回false的充分理由。例如,([0,1,2],2)将在代码现在通过。

此外,这可能是您的错字,但k参数被引用为K(错误的情况)。

答案 1 :(得分:0)

您只需要在 if 条件下进行更改

将第一个条件更改为

select
   m1.Id m1_Id,m2.Id m2_Id,m1.RoomId,
   case
      when m1.DataForm <= m2.DataForm then m2.DataForm
      else m1.DataForm
   end collision_start,
   case
      when m1.DataForm <= m2.DataForm then m1.DataTo
      else m2.DataTo
   end collision_end
from Meetings m1
inner join Meetings m2 on m1.Id<>m2.Id and m1.RoomId=m2.RoomId
where
   (m1.DataForm <= m2.DataForm and m2.DataForm < m1.DataTo)
   or
   (m2.DataForm <= m1.DataForm and m1.DataForm < m2.DataTo)

将 2nd if 条件改为

if ((A[i] != A[i+1]) && (A[i] + 1 != A[i+1]) {
    return false;
}