森田賢二のleetCode

[leetcode] 解決。27.removeElement [easy]

[leetcode] 解決。27.removeElement [easy]

森田賢二のleetCode
森田賢二のleetCode

年末まで毎日leetcodeと向き合います。

今日のLeatCodeはこちら。

「removeElement」ルール

  • numsは数値の要素が入っている配列
  • valは数値
  • 配列の中にあるvalと同じ数値のものをremoveする
  • 配列の長さは変更できない
  • 削除した数k返す
  • numsは返した数k分のremoveした数値以外の要素が入っていること。kを超え多分は数値は何でもいい

removeElement

removeElement [easy]

感想

これが一番クレバーな気がしたので載せる

自分はというと趣旨間違えていて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;
};

なるほどなぁ。

カテゴリー leetCode