Problem: 27. 移除元素
解题方法
- 暴力循环,不等于得值直接删掉
- 双指针1,将相同得值替换到列表最后(不推荐)
- 双指针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)