給定一個數組nums和一個值val,當nums內的數不等於val時,把那個不等於的數加入nums,並同時記錄長度,當有不相等的數時,長度+1,最後返回總長度。O(1)空間下完成。
元素的順序可以改變。不需要考慮數組中超出新長度後面的元素
Python
方法一 :
當nums內的數不等於val時,不相等的數加入nums,不相等的數出現時,長度+1 ,最後返回總長度。
class Solution:
def removeElement(self, nums, val):
length = 0
for i in range(len(nums)):
if nums[i] != val: #nums內的數不等於val
nums[length] = nums[i] #不等於的數加入nums
length += 1 #不相等的數時,長度+1
return length
方法二 : 指針
當nums內的數等於val時,把nums內等於val的數剃除,並把j向左靠近,不等於時,i繼續往右判斷,最後返回j+1(代表剔除與val相等的數後的總長度)
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i=0
j=len(nums)-1
while i<=j:
if(nums[i]==val):
nums[i]=nums[j]
j-=1
else:i+=1
return j+1
C++
雙指針移動
i 從位置 1開始遍歷,若發現 nums[i] 和 nums[i-1] 不相等,則說明找到新的元素,並且 nums[index] 賦值為 nums[i]。index向右移動,i 向後移動直到末尾,最後返回index累積數。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int index = 0;
for (int i=0; i<nums.size(); ++i) {
if (i == 0 || nums[i] != nums[i-1]) {
nums[index] = nums[i];
++index;
}
}
return index;
}
};