[leetcode] 問題解答と解説。27.removeElement [JavaScript]
年末まで毎日leetcodeと向き合います。
今日のLeatCodeはこちら。
「removeElement」ルール
- numsは数値の要素が入っている配列
- valは数値
- 配列の中にあるvalと同じ数値のものをremoveする
- 配列の長さは変更できない
- 削除した数k返す
- numsは返した数k分のremoveした数値以外の要素が入っていること。kを超え多分は数値は何でもいい
removeElement
感想
これが一番クレバーな気がしたので載せる
自分はというと趣旨間違えていてfor文ではやっていたもののただのfilterしていただけでした。ここでは
- 要素数は変えずに、要素をremoveした分だけ変更するというのが仕様
でした
removeElement 解決コード。一例
function removeElement(nums: number[], val: number): number {
let left = 0;
let right = nums.length - 1;
while (left <= right) { // leftがrightより同じ位置以上に来ない限り
if (nums[left] === val) { // removeすべき要素をleftから見つける
nums[left] = nums[right]; // left位置をright位置の要素に変更。何でもいい。こうすることで次のターンでrightの要素をnums[left] === val箇所で評価してもらう。右のものからvalと確認して、違うならleft要素をずらす
right--; // rightを左にずらす
} else {
left++; //
}
}
return left;
};
なるほどなぁ。