前端與算法 leetcode 27.移除元素

@TOCjavascript

前端與算法 leetcode 27.移除元素


題目描述

27.移除元素前端

概要

題目自己其實挺簡單的,官方解答也說道了人們可能會對"就地"一次感到困惑,並認爲在不復制數組的狀況下從數組中刪除元素是不可能的java

提示

雙指針,僅返回長度,元素順序能夠更改,元素不多時算法

解析

把題中的就地刪除理解爲覆蓋,也就是說,只要咱們找到一個和val同樣的值,咱們就把他覆蓋掉,因此咱們須要兩個指針,一個快指針用來尋找和比較元素,一個慢指針用來覆蓋元素,同時能夠利用js的length的特性,在返回長度以前將數組的長度直接設置爲咱們計算的長度,這樣的好處是咱們能夠直觀的看到數組的結果,同時實現了真正意義上的修改原數組數組

算法

在這裏考慮元素不多的狀況,當nums[j]與給定的值不等時覆蓋,相等時length--同時跳過該元素,也就是說最好的狀況下,數組內全部元素都與參數相等,那麼length自減到0同時直接返回0,最壞的狀況下全部元素都不等,所有覆蓋的同時返回length的,正常狀況只要nums[j]!==val,咱們就把他覆用j指向的數值覆蓋掉,並遞增i,重複這個過程一直到j到達數組的末尾,數組的新長度爲lengthspa

/** * @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
}
複製代碼

傳入[1, 3, 9, 6]和3的運行結果指針

3
[ 1, 9, 6 ]
複製代碼

執行結果code

執行用時 :64 ms, 在全部 javascript 提交中擊敗了91.87% 的用戶
內存消耗 :33.7 MB, 在全部 javascript 提交中擊敗了33.58%的用戶
複製代碼
相關文章
相關標籤/搜索