专栏首页光城(guangcity)回归Android,继续刷题

回归Android,继续刷题

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)

本文分享自微信公众号 - 光城(guangcity),作者:lightcity

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 详解数组刷题上

    一、初始定义及原地修改1.283. 移动零2.27. 移除元素3.26. 删除排序数组中的重复项4.80. 删除排序数组中的重复项 II二、基础思想应用1.75...

    公众号guangcity
  • 多种解法破中等题

    0.说在前面1.数组中的第K个最大元素1.0 问题1.1 降序方法1.2 递归快排1.3 非递归快排1.4 最大堆排序1.5 最小堆排序2.二叉搜索树中第K小的...

    公众号guangcity
  • LeetCode攀登之旅(9)

    点击公众号右下角合作转载->联系我,即可加入我的个人微信,共同探讨交流,以及入交流群(记得备注入群)!

    公众号guangcity
  • LeetCode-31-Next-Permutation

    这个排序主要是有两种情况,一个是类似于3 1 2这样的情况,直接从后往前找到第一个nums[i]<nums[i-1]的,然后把i记下来,再与后面第一个小于i的k...

    小二三不乌
  • 283 Move Zeroes

    /** * 题意:将0挪到末尾,并且不改数组中原有元素的顺序 * 解析:找到0元素,然后寻找其后面非0的元素,进行交换位置 * @param {numbe...

    用户1624346
  • Q189 Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 a...

    echobingo
  • 【LeetCode】数组--旋转数组(189)

    关注较早的读者可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的【贪心算法】已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天...

    不羁的程序员小王
  • 画解算法:15. 三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组...

    灵魂画师牧码
  • 【leetcode刷题】20T10-三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组...

    木又AI帮
  • python实现给定一个数和数组,求数组

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    用户2398817

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动