(双指针)移除元素


我的解法

我这里直接偷懒,用的是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表示删除后的真实数组位置,然后我们把不重复的元素加上去


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录