問題如下:
給定一個整數陣列 nums 和一個整數 val,刪除 nums 中所有出現的 val in-place。元素的順序可以改變。然後回傳nums中不等於val.
的元素個數考慮nums中不等於val的元素個數為k,要被接受,你需要做以下事情:
自訂法官:
法官將使用以下程式碼測試您的解決方案:
int[] nums = [...]; // Input array int val = ...; // Value to remove int[] expectedNums = [...]; // The expected answer with correct length. // It is sorted with no values equaling val. int k = removeElement(nums, val); // Calls your implementation assert k == expectedNums.length; sort(nums, 0, k); // Sort the first k elements of nums for (int i = 0; i如果所有斷言都通過,那麼您的解決方案將被接受。
範例1:
Input: nums = [3,2,2,3], val = 3 Output: 2, nums = [2,2,_,_] Explanation: Your function should return k = 2, with the first two elements of nums being 2. It does not matter what you leave beyond the returned k (hence they are underscores).範例2:
Input: nums = [0,1,2,2,3,0,4,2], val = 2 Output: 5, nums = [0,1,4,0,3,_,_,_] Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4. Note that the five elements can be returned in any order. It does not matter what you leave beyond the returned k (hence they are underscores).這是我解決的方法:
為了解決這個問題,我主要使用了兩種策略:
- 就地替換:不是建立一個新陣列來儲存不等於val的元素,而是使用同一個陣列nums覆蓋需要移除的元素。
- 雙指標技術:一個指標 (i) 迭代數組中的每個元素,另一個指標 (k) 追蹤下一個非 val 元素應放置的位置。
class Solution: def removeElement(self, nums: List[int], val: int) -> int: k = 0
for i in range(len(nums)): if nums[i] != val: nums[k] = nums[i] k = 1
return k
這是完整的解決方案:
class Solution: def removeElement(self, nums: List[int], val: int) -> int: k = 0 for i in range(len(nums)): if nums[i] != val: nums[k] = nums[i] k = 1 return k
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3