题目大意:给定一个数组 nums 和一个数值 val,将数组中所有等于 val 的元素删除,并返回剩余的元素个数。
下文给出两种解法,一种是本人按照思路直接表达的写法,另一种是其他网友的写法,供对比学习。
func deleteVal(nums []int, val int) int {
newNums := []int{}
for _, v := range nums {
//fmt.Println(v)
if v != val {
newNums = append(newNums, v)
}
}
fmt.Println(newNums)
return len(newNums)
}
func removeElement(nums []int, val int) int {
if len(nums) == 0 {
return 0
}
j := 0
for i := 0; i < len(nums); i++ {
if nums[i] != val {
if i != j { // 当出现目标数字之后,i和j就会变得不相等了,后续的数字都要逐个交换位置,将目标数字换到尾部
nums[i], nums[j] = nums[j], nums[i]
}
j++
}
}
fmt.Println(nums[:j])
return j
}