leetcode——80.删除排序数组中的重复项2

自己做出来效果并不是很好:

class Solution:
    def removeDuplicates(self, nums) -> int:
        i=0
        while i<len(nums)-2:
            j,k=i+1,i+2
            if nums[i]==nums[j]:
                if nums[j]==nums[k]:
                    nums.pop(k)
                else:
                    i,j=i+2,j+2
            else:
                i,j=i+1,j+1
        return len(nums)
执行用时 :104 ms, 在所有 Python3 提交中击败了23.37%的用户
内存消耗 :13.9 MB, 在所有 Python3 提交中击败了5.08%的用户
 
看看人家执行用时40ms的例子:
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        c=1
        n=len(nums)
        if n<=2:
            return n
        
        for i in range (2,n):
            if nums[i]!=nums[c-1]:
                c=c+1
                nums[c]=nums[i]
        return c+1

 

                                                        ——2019.10.8

 


 

代码略长,但是扩展性应该好一点,效果还好。

public int removeDuplicates(int[] nums) {  //最多出现两次,删除重复项,返回新的数组长度
        //还是应该采用双指针进行遍历
        //使用一个Int变量来控制次数不超过2
        //使用一个int变量来记录字符串的有效长度
        int len = nums.length;
        if(len<3){
            return len;
        }
        int count = 1;
        int length = 1;
        int i = 1;
        int j = 1;
        while(i<len){  //i用来对原始数组进行遍历  这里的nums是长度至少为3的情况、
            if(nums[i] == nums[i-1]){
                if(count < 2){
                    nums[j] = nums[i];
                    i++;
                    count ++ ;
                    length ++ ;
                    j ++ ;
                }else{  //如何删除重复项
                    i++;
                }
            }else{
                nums[j] = nums[i];
                j++;
                count = 1;
                i++;
                length++;
            }
        }
        for(int k = 0;k<length;k++){
            System.out.println(nums[k]);
        }
        return length;
    }

 

 ——2020.7.8

 

 
 
posted @ 2019-10-08 16:50  欣姐姐  阅读(157)  评论(0编辑  收藏  举报