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

长度为N的数组可以包含值1,2,3…N ^ 2。是否可以按O(n)时间排序?

白永昌
2023-03-14
问题内容

给定长度为N的数组。它可以包含从1到N ^ 2(N平方)(包括两个端点)的值,这些值是整数。是否可以在O(N)时间对该数组进行排序?如果可能的话如何?

编辑:这不是家庭作业。


问题答案:

将每个整数写入基数N,即每个x可以表示为(x1,x2),其中x = 1 + x1 + x2 * N。现在,您可以使用计数排序对其进行两次排序,一次在x1上,一次在x2上,从而生成已排序的数组。



 类似资料:
  • 我在GeekforGeekshttps://www.geeksforgeeks.org/minimum-number-of-jumps-to-reach-end-of-a-given-array/中检查“到达终点的最小跳跃次数”问题。我对这里提到的时间复杂度感到困惑,它是O(n^n)。 如果我看到上面的代码块,minJumps(arr,I,h)递归调用是从I=l1调用的。所以在每个递归步骤中,l(

  • 问题内容: 我刚刚开始学习数据结构,并且在进行数组插入时想知道为什么数组插入的时间复杂度为O(n)而不是O(n + 1)? 在最佳情况下,当插入在最后时,时间复杂度为O(1)。我想我们正在考虑1插入元素,因为这里没有元素被移动。在最坏的情况下,假设我们必须移动n个元素然后插入新元素,那么时间时间复杂度是否应该为O(n + 1)?n用于移动元素,1用于插入。 非常感谢您的帮助。 问题答案: O(n)

  • 问题内容: java.util.Random源代码的第294行说 为什么是这样? 问题答案: 该描述并不完全准确,因为0不是2的幂。更好的说法是 当n是2的幂或2的幂的负数或零时。 如果n是2的幂,则二进制中的n是单个1,后跟零。-n为2的补数是倒数+ 1,因此位排成一行 要了解其工作原理,请将二进制补码视为逆+ 1。 因为当您添加一个得到两个的补码时,您会一直进行到一个。 如果n不是2的幂,则结

  • 这个问题的正确答案是O(N)。但根据我的说法,答案应该是O(NlogN)。因为第一个“for循环”的复杂度应该是O(logN),因为在每次迭代中变量i被2除,而且我已经研究过,每当循环变量被2乘或除,那么时间复杂度就是O(logN)。现在,对于第二个“for循环”,复杂度应该是O(N),因此,最后一个复杂度应该是O(N*logn)。 谁能解释一下我错在哪里吗?

  • 问题内容: 使用标准列表,我尝试选择最后2个列表项。我有多种排列方式,但似乎没有什么可以选择最后2种: 我知道类似CSS3的新选择器,但如果可能的话,我更喜欢一些可以在更多浏览器中使用的选择器(不必特别在意IE)。 问题答案: 这将选择列表的最后两个项目:

  • 这是一项作业给我提出的问题: 一个病人有n片药要吃。每天,他可以吃一片或两片,直到所有的药片都消失了。设T(n)表示病人可以服用所有n种药丸的不同方式的数目。给出T(n)的封闭形式。(请注意--例如--这两个序列(1,2,2)和(2,1,2)被认为是服用5粒药丸的两种不同方式。)

  • 问题内容: 是 是 是 是 当他们有相同的基础时,我可以为他们做;当他们的基础不一样时,我无法弄清楚-我知道这些都是对的。 问题答案: 记录双方的日志。这是允许的,因为log是单调递增的函数

  • 我试图为这段代码找出一个大O的紧密界限: 如果我们从内最循环开始,它将在最坏的情况下运行k=n^2次,占O(N^2)。如果语句每次j=m*i时都为真,其中m是一个任意常数。由于j从1运行到i^2,这将在m={1,2,...,i}时发生,这意味着它将在i次时为真,i最多可以是n,所以最坏的情况将是m={1,2,...,n}=n次。如果i=n,第二个循环应该有O(N^2)的最坏情况。外环具有O(N)的