給一列升序數(shù)字序列,要求去重,輸出最后剩余多少個(gè)數(shù)(對(duì)于沒有pop操作的語言,將最后留下的數(shù)字排列在數(shù)組前部)
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操作,用游標(biāo)標(biāo)記需要把當(dāng)前數(shù)字挪到前面的哪一位(如果當(dāng)前數(shù)字和游標(biāo)位置的數(shù)字不一樣)
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操作,用游標(biāo)標(biāo)記需要把當(dāng)前數(shù)字挪到前面的哪一位(如果當(dāng)前數(shù)字和游標(biāo)位置的數(shù)字不一樣)
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 }