題目描述:
給你一個陣列 nums 和一個值 val,你需要 原地 移除所有數值等於 val 的元素。元素的順序可能發生改變。然後返回 nums 中與 val 不同的元素的數量。
假設 nums 中不等於 val 的元素數量為 k,要透過此題,您需要執行以下操作:
更改 nums 陣列,使 nums 的前 k 個元素包含不等於 val 的元素。nums 的其餘元素和 nums 的大小並不重要。
返回 k
思路分析:
- 輸入:陣列,指定刪除val
- 輸出:刪除後所剩的元素的數量,並且陣列需要完成刪除操作
- 條件:--
使用雙指標操作,i指標來尋找保留的元素,j指標來尋找保留元素的位置,找到後進行位置交換,這樣後面找到也不會重複操作。
錯誤總結:
- 在編寫程式碼的時候,儘量讓一個迴圈變數只執行單一的功能,功能過多會導致邏輯混亂(編寫函式時也應該注意)
- 要注意邊界和極端值的分析(陣列開始和結束位置)
點選檢視程式碼
//leetcode submit region begin(Prohibit modification and deletion)
func removeElement(nums []int, val int) int {
j := 0
//i尋找保留的元素
for i := 0; i < len(nums); i++ {
//找到了
if nums[i]!= val{
nums[j] = nums[i]
j++
}
}
return j // j 是新的陣列長度
}