LeetcCode 27. Remove Element

Remove Element
Remove Element

Remove Element :

給定一個數組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;
    }
};