Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
给一列升序数字序列,要求去重,输出最后剩余多少个数(对于没有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 }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理