我的解法
我这里直接偷懒,用的是go的字符串截取
func removeElement(nums []int, val int) int {
for i := 0; i < len(nums); i++ {
if nums[i] == val {
nums = append(nums[:i], nums[i+1:]...)
i--
}
}
return len(nums)
}
双指针
func removeElement(nums []int, val int) int {
i := 0
// 这里我们开始遍历数组
for j := 0; j < len(nums); j++ {
// 判断当前的值是否是重复元素
if nums[j] != val {
// 如果不是那么就i+1(i用于表示最后的结果)
// 这个数组交换的意义就相当于删除数组
nums[i] = nums[j]
i++
}
}
return i
}
实在没想到,这也可以用双指针,这里本质上也是通过一个慢指针一个块指针完成统计操作,比较难理解的就是nums[i] = nums[j]
这个其实就相当于删除操作,这个i表示删除后的真实数组位置,然后我们把不重复的元素加上去