【初级指标-能通就行】Problem: 27. 移除元素

97 阅读1分钟

Problem: 27. 移除元素

解题方法

  1. 暴力循环,不等于得值直接删掉
  2. 双指针1,将相同得值替换到列表最后(不推荐)
  3. 双指针2,将相同得值替换成后边不同得值(推荐)

Code

Python3


from typing import List


class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:

        # 直接删除
        # number = nums.count(val)
        # for i in range(number):
        #     index = nums.index(val)
        #     nums.remove(nums[index])
        # print(nums)  
        # return len(nums)

        # 双指针1   将相同值置换到最后(时间长)
        # number = nums.count(val)
        # head = 0
        # last = len(nums)-1
        # while last>head:
        #     if nums[head] == val:
        #         # 值替换
        #         nums[head] = nums[last]
        #         nums[last] = val
        #         last -= 1
        #     else:
        #         head +=1
        # print(nums)
        # return len(nums)-number

        # 双指针2 将相同值替换后边不同值
        explore = 0 # 探索指针
        resIndex = 0 # 结果指针
        while explore < len(nums):
            if nums[explore] != val:
                nums[resIndex] = nums[explore]
                resIndex += 1
            explore += 1
        return resIndex

JavaScript

var removeElement = function (nums, val) {
  // 直接删除
  // nums.sort((a, b) => a - b)
  // const head = nums.indexOf(val)
  // if (head < 0) {
  //   console.log(nums)
  //   return nums.length
  // } else {
  //   const last = nums.lastIndexOf(val)
  //   nums.splice(head, last - head > 0 ? last - head + 1 : 1)
  //   console.log(nums)
  //   return nums.length
  // }

  // 双指针1   将相同值置换到最后(时间长)
  // var number = nums.filter((_, i) => nums.indexOf(val) === i).length;
  // var head = 0;
  // var last = nums.length - 1;
  // while (last > head) {
  // if (nums[head] === val) {
  //   // 值替换
  //   nums[head] = nums[last];
  //   nums[last] = val;
  //   last -= 1;
  // } else {
  //   head += 1;
  // }
  // }
  // return nums.length - number;

  //双指针2 将相同值替换后边不同值
  let explore = 0; // 探索指针
  let resIndex = 0; // 结果指针

  while (explore < nums.length) {
    if (nums[explore] !== val) {
      nums[resIndex] = nums[explore];
      resIndex++;
    }
    explore++;
  }

  return resIndex;
};
// @lc code=end
removeElement([0, 1, 2, 2, 3, 0, 4, 2], 2)