From 20faa53739104f4d979bf4ef4f49894fdd03840a Mon Sep 17 00:00:00 2001 From: KieranTou Date: Wed, 15 Feb 2023 17:03:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA27.=E7=A7=BB=E9=99=A4=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E5=A2=9E=E5=8A=A0go=E8=AF=AD=E8=A8=80=E7=9A=84?= =?UTF-8?q?=E7=9B=B8=E5=90=91=E5=8F=8C=E6=8C=87=E9=92=88=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0027.移除元素.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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