回归Android,继续刷题
- 2019 年 10 月 5 日
- 筆記

LeetCode之删除排序数组中的重复项(13)
0.说在前面1.双指针法2.set去重法3.作者的话
0.说在前面
【安卓】
这两天要做个安卓项目,哎,我之前是做安卓开发的,做了半年多,后面就没做了,距离现在至少1年半有余。
现在在回头看此时的安卓开发,已不是当年的安卓,Oracle前两天都提出java要收费了,谷歌的android也要收费了,一股清流,就这么快没了。。颠覆eclipse的android studio的ide,现在已经更新3.x了,针对安卓开发的语言,从java演变到现在的Kotlin,时代变了,现在不是安卓的寒冬,是互联网的寒冬。。
搞了半天的安卓,看了半天代码,发现忘得差不多了,重头来过。时代在变,仍然改变不了你前进的步伐,让我们一起探讨今天的学习之旅。
【刷题】
昨天研究了d3可视化,今天继续leetcode,题目为删除排序数组中的 重复项,接下来让我们用下面几种方法来实现一下这个简单题。
1.双指针法
【思想】
定义一个快指针,慢指针,然后通过慢指针记录真实数组的位置,最后所指向的就是实际长度!
class Solution: def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ if not nums: return 0 # 慢指针 length = 0 for each_num in nums: if each_num != nums[length]: length += 1 nums[length] = each_num length += 1 return length

C++版本代码
class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.size() == 0) return 0; int numbers = 0; for(int i=0;i<nums.size();i++) { if (nums[i] != nums[numbers]) { numbers++; nums[numbers]=nums[i]; } } numbers += 1; return numbers; } };

2.set去重法
这里要特别说明一下,直接返回长度,在网站通不过,原因在于你没有修改nums数组的内容!
方法一
class Solution: def removeDuplicates(self, nums): if not nums: return 0 nums_len = len(list(set(nums))) ls = list(set(nums)) ls.sort() for i in range(nums_len): nums[i]=ls[i] return nums_len

方法二
class Solution: def removeDuplicates(self, nums): if not nums: return 0 nums_len = len(list(set(nums))) i = 0 for each in sorted(list(set(nums))): nums[i] = each i += 1 return nums_len

方法三
class Solution: def removeDuplicates(self, nums): nums[:]=sorted(list(set(nums))) return len(nums)
