这是442中的重复数据。leetcode上的数组很难。
标签:“哈希到位”,“数组”
给您一个$ n $的整数阵列,所有这些阵列都在$ [1,n] $的范围内,并且每个整数出现一次或两次。请找出所有出现两次的整数并以表单返回几个阵列。
您必须设计和实施一种算法,其时间复杂到$ O(n)$,并且仅使用恒定的额外空间来解决此问题。
示例1:
示例2:
示例3:
暗示:
给定的数组长度为$ n $,所有数字范围均为$ [1,n] $,并找到所有出现不止一次的数字。
利用值域的大小和数字大小之间的等效关系,我们可以构造一个相应的“关系”,以便每个数字出现在该位置中应显示的位置:对于$ k $的数字,我们应该出现在其中的位置设置为$ k -1 $。
基于此,我们从背面穿越$ nums $,并试图将当前处理的$ numS [i] $放在目标位置$ nums [i] -1 $。应该出现,发现$ nums [nums [i] - 1] = nums [i](nums [i] -1
eq i)$表示该数字已经不止一次出现。这次,我们将答案添加到$ nums [i] $。由于目前尚无交流,因此$ nums [i] $仍在占据其他数字的目标位置。LATER进行了测试,并反复添加了答案。我们将$ nums [i] $放在负数上,并在遍历期间跳了负数。
代码:
这是我们“通过Leetcode”系列的第一篇文章。该系列始于2021/01/01。从开始开始时的起始代码开始,总共有1916年的问题。该主题已经完成。
在这一系列文章中,除了解释问题 - 解决想法之外,还将尽可能多地提供最简洁的代码。如果涉及通信,将有相应的代码模板。
为了使学生更容易在计算机上调试和提交代码,我建立了一个相关的仓库:https://github.com/sharingsource/logicstack-letcode。
在仓库地址中,您可以看到一系列文章的解释链接,一系列文章的相应代码,leetcode的原始链接以及其他首选解决方案。
原始:https://juejin.cn/post/709518269517661792