【LeetCode 26】从排序数组中删除重复项

26. Remove Duplicates from Sorted Array

题目难度: 简单

Given a sorted array nums, remove the duplicates such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array with O(1) extra memory.

Example 1:

1
2
3
4
5
Given _nums_ = **[1,1,2]**,

Your function should return length = **`2`**, with the first two elements of _`nums`_ being **`1`** and **`2`** respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

1
2
3
4
5
Given _nums_ = **[0,0,1,1,1,2,2,3,3,4]**,

Your function should return length = **`5`**, with the first five elements of _`nums`_ being modified to **`0`**, **`1`**, **`2`**, **`3`**, and **`4`** respectively.

It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

1
2
3
4
5
6
7
8
// **nums** is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);

// any modification to **nums** in your function would be known by the caller.
// using the length returned by your function, it prints the first **len** elements.
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

解题思路

由于数组已经是排序数组了,所以直接判断当前索引后面的元素是否与当前元素相等即可剔除重复元素。

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution:
   def removeDuplicates(self, nums):
       """
      :type nums: List[int]
      :rtype: int
      """

       index = 1
       while True:
           if index >= len(nums):
               break
           if nums[index] == nums[index - 1]:
               nums.pop(index)
           else:
               index = index + 1

       return len(nums)
黄小豆 wechat
关注我的公众号,同步推送博客内容
坚持原创技术分享,您的支持将鼓励我继续创作!
0%