Leecode刷题之旅-C语言/python-26.删除数组中的重复项
Posted 李逍遥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Leecode刷题之旅-C语言/python-26.删除数组中的重复项的主要内容,如果未能解决你的问题,请参考以下文章
Leecode刷题之旅-C语言/python-100相同的树
Leecode刷题之旅-C语言/python-118杨辉三角
Leecode刷题之旅-C语言/python-141环形链表
Leecode刷题之旅-C语言/python-121买卖股票的最佳时机