zoukankan      html  css  js  c++  java
  • Leecode刷题之旅-C语言/python-26.删除数组中的重复项

    /*
     * @lc app=leetcode.cn id=26 lang=c
     *
     * [26] 删除排序数组中的重复项
     *
     * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/
     *
     * algorithms
     * Easy (42.77%)
     * Total Accepted:    89.1K
     * Total Submissions: 208.1K
     * Testcase Example:  '[1,1,2]'
     *
     * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
     * 
     * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
     * 
     * 示例 1:
     * 
     * 给定数组 nums = [1,1,2], 
     * 
     * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 
     * 
     * 你不需要考虑数组中超出新长度后面的元素。
     * 
     * 示例 2:
     * 
     * 给定 nums = [0,0,1,1,1,2,2,3,3,4],
     * 
     * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
     * 
     * 你不需要考虑数组中超出新长度后面的元素。
     * 
     * 
     * 说明:
     * 
     * 为什么返回数值是整数,但输出的答案是数组呢?
     * 
     * 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
     * 
     * 你可以想象内部操作如下:
     * 
     * // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
     * int len = removeDuplicates(nums);
     * 
     * // 在函数里修改输入数组对于调用者是可见的。
     * // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
     * for (int i = 0; i < len; i++) {
     * print(nums[i]);
     * }
     * 
     * 
     */
    int removeDuplicates(int* nums, int numsSize) {
    
        if(numsSize==0){ 
            return 0;    
        }    
        int length = 0;    
        for(int i=0;i<numsSize;i++)
        {        
            if(nums[i]!=nums[length])
            {            
                length++;
                nums[length]=nums[i];        
                }    
        }    
        length+=1;
        return length;
    }

    这里判断如果数组为空,那么返回长度为0.

    设置一个length变量为0,用于记录不同值的个数。

    在数组中循环,如果循环到的值不等于num[length] 实际上可以理解为 num[length]为数组的第一个数,找到和第一个数不同的数,就把length+1 然后把数存放到num[length+1]中。

    之后的以此类推。因为题目中说了不需要管那些超出长度的,所以这种方法会把不一样的数一个个的存放进来,最后得到的length 是数组中可寻址的最大长度,若要返回整个数组的长度就需要把 length+1.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    python:

    #
    # @lc app=leetcode.cn id=26 lang=python3
    #
    # [26] 删除排序数组中的重复项
    #
    # https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/
    #
    # algorithms
    # Easy (42.77%)
    # Total Accepted:    89.1K
    # Total Submissions: 208.1K
    # Testcase Example:  '[1,1,2]'
    #
    # 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
    # 
    # 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
    # 
    # 示例 1:
    # 
    # 给定数组 nums = [1,1,2], 
    # 
    # 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 
    # 
    # 你不需要考虑数组中超出新长度后面的元素。
    # 
    # 示例 2:
    # 
    # 给定 nums = [0,0,1,1,1,2,2,3,3,4],
    # 
    # 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
    # 
    # 你不需要考虑数组中超出新长度后面的元素。
    # 
    # 
    # 说明:
    # 
    # 为什么返回数值是整数,但输出的答案是数组呢?
    # 
    # 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
    # 
    # 你可以想象内部操作如下:
    # 
    # // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
    # int len = removeDuplicates(nums);
    # 
    # // 在函数里修改输入数组对于调用者是可见的。
    # // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
    # for (int i = 0; i < len; i++) {
    # print(nums[i]);
    # }
    # 
    # 
    #
    class Solution:
        def removeDuplicates(self, nums: List[int]) -> int:
            if len(nums)<=1:
               return len(nums)
            s=0
            for f in range(1,len(nums)):
                if nums[s]!=nums[f]:
                    s+=1
                    nums[s]=nums[f]
            return s+1
  • 相关阅读:
    记录相关操作
    mysql数据类型
    完整性约束
    表相关操作
    MySQL存储引擎
    库相关操作
    linux学习笔记2---命令cd
    linux学习笔记命令篇1---命令ls
    linux常用命令系列
    redis34--string 操作
  • 原文地址:https://www.cnblogs.com/lixiaoyao123/p/10493649.html
Copyright © 2011-2022 走看看