先端とアルゴリズムleetcode 27.要素の除去
目次フロントエンドとアルゴリズムleetcode 27.削除要素 テーマ記述 概要 ヒント 解析 アルゴリズム 先端とアルゴリズムleetcode 27.要素の除去
テーマの説明
27.要素の除去
概要
タイトル自体は簡単です.公式解答も
ヒント
二重のポインタは長さだけを返します.元素の順序は変更できます.元素が少ない場合
解析
問題の現場削除を上書きとして理解します.つまり、私たちはvalと同じ値を見つけたら、彼を上書きします.だから、私たちは2つのポインタが必要です.一つの速いポインタは元素を探して比較します.一つの遅い針は元素を覆います.jsの
アルゴリズム
ここでは、要素が少ない場合を考慮して、
テーマの説明
27.要素の除去
概要
タイトル自体は簡単です.公式解答も
" "
と言っています.コピー配列なしで配列から要素を削除することは不可能だと思います.ヒント
二重のポインタは長さだけを返します.元素の順序は変更できます.元素が少ない場合
解析
問題の現場削除を上書きとして理解します.つまり、私たちはvalと同じ値を見つけたら、彼を上書きします.だから、私たちは2つのポインタが必要です.一つの速いポインタは元素を探して比較します.一つの遅い針は元素を覆います.jsの
length
の特性を利用して、戻りの長さの前に配列の長さを直接設定します.このような利点は、配列の結果を直感的に見ることができ、真の意味での修正元配列を実現します.アルゴリズム
ここでは、要素が少ない場合を考慮して、
nums[j]
が所与の値と異なるときにカバーされ、等しいときにlength--
が同時にこの要素をスキップし、すなわち最も良い場合には、配列内のすべての要素がパラメータと等しくなると、lengthは0に減少してから直接に0に戻り、最悪の場合はすべての要素が等しくなく、すべてカバーされながらlengthに戻る.彼がjで指し示した数値で上書きしてiをインクリメントします.このプロセスはjが配列の最後に到達するまで繰り返します.配列の新しい長さはnums[j]!==val
です./**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
const removeElement = (nums, val) => {
if (nums.length === 0) return 0
let { length } = nums
let [i, j] = [0, 0]
while (j < nums.length) {
if (nums[j] !== val) {
nums[i] = nums[j]
i++
} else {
length--
}
j++
}
nums.length = length
return length
}
着信length
と3の運転結果3
[ 1, 9, 6 ]
実行結果 :64 ms, javascript 91.87%
:33.7 MB, javascript 33.58%