1の範囲≤[I]≤n(nはアレイのサイズ=)整数配列の指定された、配列番号を他人だけ1回、2回現れます。
全ての数字[1、n]は、アレイ内の範囲との間に表示されていないことが判明。
あなたはこの作業の余分なスペースと時間の複雑さはO(n)の場合では使用しないことができますか?あなたは、アレイは、余分なスペースに戻っていることを前提とすることはできません。
例:
入力:
[4,3,2,7,8,2,3,1]
出力:
[5,6]
私たちは、デジタルインデックスが発生していない記録するために、代理の対応する位置を使用することができます。
に対処。
同図を示すような-4 0位置として添え字の数字は、登場しました。
添字の数字は、そのような1〜3の位置として、何図2は存在しなかったことを示します。
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
for (int i = 0; i < nums.length; i++) {
int index = Math.abs(nums[i]) - 1;
//去对应下标做标记。
if (nums[index] > 0) {
nums[index] *= -1;
}
}
List<Integer> result = new LinkedList<Integer>();
for (int i = 1; i <= nums.length; i++) {
//大于0说明没有出现过。
if (nums[i - 1] > 0) {
result.add(i);
}
}
return result;
}
}