python_lintcode_100删除排序数组中的重复数字 _101删除排序数组中的重复数字2

来源:互联网 发布:淘宝量子恒道在哪里 编辑:程序博客网 时间:2024/06/06 17:39

101删除排序数组中的重复数字

题目

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

样例
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。

思路

  • 本题目比较容易出现时间限制
  • 减少for嵌套的使用
  • 不能新建数组,不能添加原数组的空间。

代码

class Solution:    """    @param: nums: An ineger array    @return: An integer    """    def removeDuplicates(self, nums):        # write your code here        a=len(nums)        if a<2:return a        #第二个与第一个开始比较是否相同,count存放不重复数字的数量        count=1        for i in range(1,a):            #重复            if nums[i]==nums[i-1]:                continue            else:            #不相同,则将放在nums的count位置                nums[count]=nums[i]                count+=1        #count前都是不重复的数字        nums=nums[:count]        return len(nums)

101删除排序数组中的重复数字2

题目

http://www.lintcode.com/zh-cn/problem/remove-duplicates-from-sorted-array-ii/#

代码

class Solution:    """    @param: nums: An ineger array    @return: An integer    """    def removeDuplicates(self, nums):        # write your code here        a=len(nums)        if a<2:return a        #time来标记重复的次数,count表示结果的的下标        time=1        count=1        for i in range(1,a):            #若出现重复的情况,time+1            if nums[i]==nums[i-1]:                time+=1                continue            else:                if time>=2:                    #出现重复的,结果应为两个重复的数,并初始化time                    nums[count]=nums[i-1]                    time=1                    count+=1                nums[count]=nums[i]                count+=1        #若最后几个都是重复的,则上面的循环只能标记了一个,结果需要进行补充第二个        #处理最后部分出现两次的情况        if nums[a-1]==nums[a-2]:            nums[count]=nums[a-1]            nums=nums[:count+1]        else:            nums=nums[:count]        return len(nums)
阅读全文
0 0
原创粉丝点击