什么是快慢指针?
通俗来讲就是用一快、一慢两个指针(两个变量来记录两种状态)。以达到遍历一次即可完成任务的目的。快慢指针比较经典的案例是解决是否有环的问题。
下面来道算法题感受下:
暴力求解:
首先考虑使用暴力求解。想象下生活中我们遇到这种问题是如何解决的呢。
比如日常生活中我们排队,假设队伍中有几个人走了。如果这个队伍很长,大家也不知道有空位可以向前走。那么就需要你从队头开始依次去看有没有空位,查看有几个空位后面的人需要向前走几步,然后让空位后面的人向前走。暴力求解就是这样的逻辑。
快慢指针:
其实你只需要走到每个空位处喊一句“此空位后的人向前走n部”即可。
func removeElement(nums []int, val int) int {
l := 0 // 这就相当于检查空位的“你”
for i := range nums {
// 让后排的人依次向前
if nums[i] != val {
nums[l] = nums[i]
l++
}
}
return l
}