likes
comments
collection
share

从 Remove Element 速过 Go 代码风格

作者站长头像
站长
· 阅读数 2

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。

相关链接