当前位置: 首页 > 知识库问答 >
问题:

解决Codibility PermMissingElem测试的正确方法是什么?(爪哇)

谢财
2023-03-14

我从Codibility的代码测试练习中发现了以下问题:

给出了一个由N个不同整数组成的零索引数组A,该数组包含范围[1...(N 1)]的整数,这意味着正好缺少一个元素。

你的目标是找到缺失的元素。

编写一个函数:

类解决方案{公共int解决方案(int[]A);}

即,给定一个索引为零的数组A,返回缺失元素的值。

例如,给定一个数组:

A[0]=2A[1]=3A[2]=1A[3]=5

函数应该返回4,因为它是缺少的元素。

假定:

N是范围[0...100,000]内的整数;A的元素都是不同的;数组A的每个元素都是范围[1...(N 1)]内的整数。

复杂性:

预期最坏情况时间复杂度为O(N);预计最坏情况下的空间复杂度为O(1),超出输入存储(不是

可以修改输入数组的元素。

我的方法是将给定的数组转换为ArrayList,使用ArrayList查找数组中的最低和最高值,并从最低到最高迭代所有可能的值,然后返回丢失的值。

这解决了示例问题,但我的问题似乎是在给定数组的以下条件下无法得到正确答案:

“空列表和单个元素”

"缺少第一个或最后一个元素"

“单一元素”

"两个要素"

我做错了什么?解决这个问题的正确方法是什么?

共有3个答案

赖杰
2023-03-14

问题陈述明确规定数组将由“N个不同的整数”组成,因此N必须至少为2。如果我们用英语写N=0和N=1,它们就毫无意义,例如“一个由0个不同整数组成的数组……”。

给出了一个由N个不同整数组成的零索引数组A,该数组包含范围[1...(N 1)]的整数,这意味着正好缺少一个元素。

有了这些初始条件和规定的假设,“单一元素”、“空列表”等测试是完全不合适的。

正确的生产代码很可能必须测试无效条件,但这不是挑战的既定目标。

黄高爽
2023-03-14

这个问题是时间复杂性教训的一部分。

https://codility.com/media/train/1-TimeComplexity.pdf

事实上,最后有一个关于如何计算数组中元素之和的解释,而不需要做任何循环。

这是Python3的最终解决方案:

def solution(A):

    n = len(A)+1
    result = n * (n + 1)//2

    return result - sum(A)
米项禹
2023-03-14

这个问题有一个数学解决方案,其基础是从1到n的连续整数之和等于n(n1)/2

使用这个公式,我们可以计算从1到n1的和。然后用时间复杂度计算数组中所有元素的实际总和。

完整总数和实际总数之间的差值将产生缺失元素的值。

空间复杂度是O(1)

 类似资料:
  • 我在解决使用q.all美元的promise时遇到了问题,有人能帮我吗? 当我有一个promise时,以下几点很好: 但是我需要进行多个ajax调用,所以我使用了$q.all如下所示: 现在我需要一个接一个地解析$q中的所有promise,就像我解析的单promise一样,如上所示。因此,我使用了下面所示的代码,但它没有按预期工作。我开始怀疑我在$q.all(promise)中使用的逻辑来解决pro

  • null 我正在用trie把字典里的所有单词都倒置起来。然后,为了解决这些查询,我按照以下方式进行:- 如果trie中有单词,请将其从trie中删除。 现在从根遍历trie,直到查询字符串中的字符与trie值匹配的点。让最后一个字符匹配的点为p。 现在从这一点P开始,我使用DFS遍历trie,在遇到叶节点时,将形成的字符串推送到可能的结果列表。 现在,我将从该列表返回词典中最小的结果。 当我在SP

  • 问题内容: 我注意到Java浮点精度的一些问题 我不仅有问题,而且也有问题。 有人可以解释幕后发生的事情吗,我们如何获得准确的数字?处理这些问题时正确的方法是什么? 问题答案: 问题是精度有限。它不能完全代表。(当然,也是如此:它具有更高的精度,但仍然是有限的。) 使上述问题更加明显的另一个问题是a 而不是a ,因此您将被提升为执行减法的操作,当然,此时系统无法恢复a所丢失的精度。 本来 可以代表

  • 我在尝试连接magento v2时遇到此错误。0.2 SOAP API。 我正在本地主机上运行 我尝试了大多数解决方案,但没有一个奏效。 安装SOAP ssl存在于php.ini文件 在文件中获取内容不返回任何内容

  • 问题内容: 这个问题应该比关于更多。 我有一个子类(在python 2.7中,numpy 1.6.2),并且我发现在对象时未列出的字段名称(因此,ipython的自动完成功能无效)。 为了修复它,我尝试在子类中重写,如下所示: 结果是:。(我发现这里实际上应该在python 3.3中工作…) 作为一种解决方法,我尝试了: 据我所知,这是可行的,但当然并不优雅。 问题: 后一种解决方案对我而言是否正

  • 本文向大家介绍什么是确认测试?相关面试题,主要包含被问及什么是确认测试?时的应答技巧和注意事项,需要的朋友参考一下 缺陷修复后再对其进行测试,确保真正被修复