トピック:
1≤a[i]≤n(nは配列の長さ)である整数配列aが与えられると、一部の要素は2回表示され、他の要素は1回表示されます。
2回表示されるすべての要素を検索します。
余分なスペースを使用せずに、この問題をO(n)時間で解決できますか?
例:
入力:
[4,3,2,7,8,2,3,1]出力:
[2,3]
アイデア:
配列内の数値の正と負を使用して、位置に対応する数値がすでに表示されているかどうかを示します
コード:
/**
* @param {number[]} nums
* @return {number[]}
*/
var findDuplicates = function(nums) {
let res = [];
for(let i = 0; i < nums.length; i++) {
let num = Math.abs(nums[i]);
if(nums[num - 1] > 0) {
nums[num - 1] *= -1;
} else {
res.push(num);
}
}
return res;
};