diff --git a/problems/0027.移除元素.md b/problems/0027.移除元素.md index 3e26338d..91150c74 100644 --- a/problems/0027.移除元素.md +++ b/problems/0027.移除元素.md @@ -231,6 +231,31 @@ func removeElement(nums []int, val int) int { return res } ``` +```go +//相向双指针法 +func removeElement(nums []int, val int) int { + // 有点像二分查找的左闭右闭区间 所以下面是<= + left := 0 + right := len(nums) - 1 + for left <= right { + // 不断寻找左侧的val和右侧的非val 找到时交换位置 目的是将val全覆盖掉 + for left <= right && nums[left] != val { + left++ + } + for left <= right && nums[right] == val { + right-- + } + //各自找到后开始覆盖 覆盖后继续寻找 + if left < right { + nums[left] = nums[right] + left++ + right-- + } + } + fmt.Println(nums) + return left +} +``` JavaScript: ```javascript