要求O(n) 这就代表了我们不能排序,如果可以排序的话会很简单。比如可以如下这样:
先对数组排序,只要假设第一个缺失的数字就好了,首先假设是1 如果出现了1 那么我们再假设是 2 以此类推就好了。
要求O(n) 这也就意味着我们不能对数组进行排序操作。那么如何找到第一个缺失的正数呢?方法是把数字放在其正确的位置上 第一个位置 放 1 第二个位置放 2 以此类推,如果有数字不符合这个条件,那么该位置就是缺失的第一个数。
ps for里面用的是while,不然 以 -1 3 1 4 为例,是if的话只换了一次 变成 -1 1 3 4,只要用while 才能正确的把 1 也交换过。还需要考虑交换的两者不能一样,不然停不下来了。。。
虽然o(n)并没有变得更快hhh 主要是样例太小了
网友评论