给一列升序数字序列,要求去重,输出最后剩余多少个数(对于没有pop操作的语言,将最后留下的数字排列在数组前部)
Python版:使用pop操作
1 #1047
2 #Runtime: 220 ms
3 #Memory Usage: 14.6 MB
4
5 class Solution(object):
6 def removeDuplicates(self, nums):
7 """
8 :type nums: List[int]
9 :rtype: int
10 """
11 i = 1
12 while i < len(nums):
13 if i > 0 and nums[i - 1] == nums[i]:
14 nums.pop(i)
15 else:
16 i += 1
17 return len(nums)
Python版:不使用pop操作,用游标标记需要把当前数字挪到前面的哪一位(如果当前数字和游标位置的数字不一样)
1 #1047
2 #Runtime: 126 ms
3 #Memory Usage: 14.9 MB
4
5 class Solution(object):
6 def removeDuplicates(self, nums):
7 """
8 :type nums: List[int]
9 :rtype: int
10 """
11 cnt = 1;
12 for i in range(len(nums) - 1):
13 if nums[cnt - 1] != nums[i + 1]:
14 cnt += 1
15 nums[cnt - 1] = nums[i + 1]
16 return cnt
C版:不使用pop操作,用游标标记需要把当前数字挪到前面的哪一位(如果当前数字和游标位置的数字不一样)
1 #1047
2 #Runtime: 27 ms
3 #Memory Usage: 7.4 MB
4
5 int removeDuplicates(int* nums, int numsSize){
6 int cnt = 1;
7 for(int i = 0; i < numsSize - 1; i++) {
8 if(nums[cnt - 1] != nums[i + 1]) {
9 cnt++;
10 nums[cnt - 1] = nums[i + 1];
11 }
12 }
13 return cnt;
14 }