1. 程式人生 > >Leetcode演算法——27、陣列刪除元素

Leetcode演算法——27、陣列刪除元素

給定一個數組和一個常量 val,刪除陣列中所有等於 val 的元素,返回新的長度。

備註:

  • 不要為另外的陣列去開闢新的空間,只能修改原陣列,空間複雜度為O(1)。
  • 元素的順序可以改變。
  • 陣列在返回長度之後的元素無關緊要。

示例: Example 1: Given nums = [3,2,2,3], val = 3, Your function should return length = 2, with the first two elements of nums being 2. It doesn’t matter what you leave beyond the returned length.

Example 2: Given nums = [0,1,2,2,3,0,4,2], val = 2, Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4. Note that the order of those five elements can be arbitrary. It doesn’t matter what values are set beyond the returned length.

思路

可以參考陣列去重,裡面的兩個去重方法都適用於本題。

本題以不改變陣列長度的第二種方法進行實現:

1、從左到右掃描,維護一個索引,這個索引始終保持為新陣列的最後一位。 2、如果掃描到了一個元素不等於val,則將索引+1,且索引對應的值修改為當前元素值。 3、此方法不會改變陣列的長度。

python 實現

def removeElement(nums, val):
    """
    :type nums: List[int]
    :type val: int
    :rtype: int
    """
    if not nums:
        return 0
    
    idx = 0
    for num in nums:
if num != val: nums[idx] = num idx += 1 return idx if '__main__' == __name__: nums = [0,1,2,2,3,0,4,2] val = 2 print(removeElement(nums, val))