当前位置: 首页 > 面试题库 >

八、 算法题:有一个长度为n一1的数组,包含1一n中不重复的乱序的数,求寻找范围内不在数组中的数,考虑空间占用,性能优化,溢出等情况,至少写两个算法

宗政燕七
2023-03-14
本文向大家介绍八、 算法题:有一个长度为n一1的数组,包含1一n中不重复的乱序的数,求寻找范围内不在数组中的数,考虑空间占用,性能优化,溢出等情况,至少写两个算法相关面试题,主要包含被问及八、 算法题:有一个长度为n一1的数组,包含1一n中不重复的乱序的数,求寻找范围内不在数组中的数,考虑空间占用,性能优化,溢出等情况,至少写两个算法时的应答技巧和注意事项,需要的朋友参考一下

当n不太大时,可以考虑求和。先算出1~n的所有数的和,然后减去数组中出现的所有自然数的和。时间复杂度为O(n),空间复杂度O(1)。这种方法的缺点是n不能太大,n比较大时,求和容易溢出。 用位图。从头到尾的扫描整个数组,把出现的数相应的位设置为1.然后再扫描位图,找出不为1的那一位,即为要找的数。这种方法的时间复杂度为O(n),空间复杂度为O(n)。 异或有个很巧妙的地方:同一变量和该变量与另一变量的异或值的异或等于这个变量自身。所以我们可以把1~n的所有数异或,再把数组中出现的所有数异或,然后再把这两个异或的结果异或,最后得到的值即为我们要找的值。这样时间复杂度为O(n),空间复杂度为O(1)。在空间上比第二种方法要好,而且不会出现第一种方法中所说的溢出问题。

 

 类似资料:
  • 问题内容: 我正在寻找以下所有替代方案,以创建一个包含1到N的JavaScript数组,其中N仅在运行时才知道。 在我看来,应该有一种没有循环的方法。 问题答案: 如果我能得到想要的结果,则需要一个数字数组,以后可以循环使用。 如果这是您所需要的,您可以代替吗? 然后在您要使用它时…(未优化,例如) 例如,如果您不需要在数组中 存储 任何内容,则只需要一个长度合适的容器即可进行迭代……这可能会更容

  • 本文向大家介绍一个长度为N的整形数组,数组中每个元素的取值范围是[0,n-1],判断该数组否有重复的数,请说一下你的思路并手写代码相关面试题,主要包含被问及一个长度为N的整形数组,数组中每个元素的取值范围是[0,n-1],判断该数组否有重复的数,请说一下你的思路并手写代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 把每个数放到自己对应序号的位置上,如果其他位置上有和自己对应序号相同的数

  • 我试图写一个算法,它需要可变数量的通用数组,存储在中,并收集其中所有唯一的元素(元素只发生一次),并将其存储在一个数组中,称为。例如,数组: 将生成包含内容的数组。 以下是我当前的流程算法: 请注意,是一个数组,它包含

  • 我有一个数组,类似于[1,3,5]。对于这些元素中的每一个,我都需要找到当前元素最高的最长子数组。答案是所有子数组的长度之和。 最终答案=1+2+3=6[单个子数组的长度] 对于这个问题,我可以给出一个强力O(N^2)。有没有更好的办法来解决这个问题?

  • 本文向大家介绍写一个方法从数组中随机抽取N个不重复的元素相关面试题,主要包含被问及写一个方法从数组中随机抽取N个不重复的元素时的应答技巧和注意事项,需要的朋友参考一下

  • 初始化一个包含指定范围中数字的数组,包含 start和end,两个元素之间的比例是step(后一个数是前一个数的step 倍)。 如果 step 等于 1 则返回一个错误。 使用Array.from(),Math.log() 和 Math.floor() 来创建一个所需长度的数组,使用 Array.map() 来填充所需的值。 省略第二个参数 start,使用默认值1。 省略第三个参数 step,