从 Remove Element 速过 Go 代码风格
Remove Element 要求在原数组上进行操作,通过对输出结果的分析,发现被清除(重置)的 第i
位必须被 != val
的元素值取代。
根据以上限制,考虑将 nums[i] == val
的元素值重置并与数组尾部值进行交换,以满足数组头部不为初始值。主要思想确认后,还需要考虑到 nums
中可能存在多个值与 val
相等,借助数组尾部下标也是有序的这一特点,从右到左依次与 nums[i] == val
重置后的值进行交换即可满足题目要求。
// 创建左右指针,同时向中间扫描
// 当左指针大于右指针时,扫描结束
// 此时左指针移动的距离就是目标数组的长度
func removeElement(nums []int, val int) int {
pl, pr := 0, len(nums) -1
for pl <= pr {
if nums[pl] == val {
nums[pl] = nums[pr]
pr--
} else {
pl++
}
}
return pl
}
此处出现了多个变量同时初始化的简写,以及严格的代码风格
多变量初始化
// name, name := val, val
pl, pr := 0, len(nums) -1
代码风格
// 以 if-else 为例
if condition {
// ...
} else {
// ...
}
与 Javscript 的自由不同的是, Go 语言对于代码风格自有严格的约束。一般要求 {}
要与 关键词保持同行,例如 if-else
中,如果 else
顶格就会导致编译错误。具体请参考下方文档 Go-statements 中关于 if statements
部分。
注:更多代码风格相关可以查看 gofmt
以及 golangci-lint
,这些有点像 Javascript 中的 eslint。
相关链接
- remove-element: leetcode.com/problems/re…
- Go-statements: go.dev/ref/spec#St…
转载自:https://juejin.cn/post/7351685099005968435