LeetCode每日一题题解:26. 删除有序数组中的重复项-题解-python && C++源代码

简介: LeetCode每日一题题解:26. 删除有序数组中的重复项-题解-python && C++源代码

26. 删除有序数组中的重复项


难度简单2471收藏分享切换为英文接收动态反馈


给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。


由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。


将最终结果插入 nums 的前 k 个位置后返回 k 。


不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。


判题标准:


系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案
int k = removeDuplicates(nums); // 调用
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过。


示例 1:


输入:nums = [1,1,2]

输出:2, nums = [1,2,_]

解释:函数应该返回新的长度


并且原数组 nums 的前两个元素被修改为

1
2

不需要考虑数组中超出新长度后面的元素。

示例 2:


输入:nums = [0,0,1,1,1,2,2,3,3,4]

输出:5, nums = [0,1,2,3,4]

解释:函数应该返回新的长度


并且原数组 nums 的前五个元素被修改为

0
1
2
3
4

不需要考虑数组中超出新长度后面的元素。


提示:


0 <= nums.length <= 3 * 104

-104 <= nums[i] <= 104

nums 已按 升序 排列

题目思路:


设左右双指针,左指针和右指针均以1为起点出发,右指针先移动,

当右指针遇见跟自己左边不一样的时候,则将右指针的值赋给左指针

然后左指针右移 右指针继续右移

出1出发的原因是在于第一个位置必定留给第一个值


Python代码:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:  #如果nums是空的直接输出0
            return 0
        l = r = 1  #设初始双指针为1
        while r<len(nums):  #右指针必须小于数组长度
            if nums[r] != nums[r-1]:  #如果右指针等于他的前一位
                nums[l] = nums[r]  #则右指针赋给左指针
                l += 1      #左指针右移
            r += 1  #右指针右移
        return l  #返回结果

C++代码:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();//求出数组的长度
        if (n==0){  //如果数组长度为0,则输出0
            return 0;
        }
        int l = 1 , r = 1;  //定义左右指针均从1出发
        while (r < n){            
             if (nums[r]!=nums[r-1]){ //如果右指针不等于左指针的,则将右指针的值赋给左指针的,
                 nums[l] = nums[r]; //因为左指针有了新的值,所以加1
                 l++;   //因为左指针有了新的值,所以加1
             }
             r++;  //右指针继续+1
        }
        return l;//输出结果
    }
};


相关文章
|
8月前
|
jenkins Shell 测试技术
|
8月前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
495 5
|
8月前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
739 1
|
8月前
|
jenkins Java 持续交付
Java、Python、C++支持Jenkins和SonarQube(三)
Python与Jenkins和SonarQube
408 1
|
8月前
|
jenkins Java 测试技术
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
512 2
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
1666 0
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
581 12
|
C++ Python
探索Python与C/C++混合编程的艺术
探索Python与C/C++混合编程的艺术
571 1
WK
|
机器学习/深度学习 Java 程序员
为什么Python比C++慢很多?
Python相较于C++较慢主要体现在:动态类型系统导致运行时需解析类型,增加开销;作为解释型语言,逐行转换字节码的过程延长了执行时间;自动内存管理和垃圾回收机制虽简化操作但也带来了额外负担;全局解释器锁(GIL)限制了多线程性能;尽管Python库方便灵活,但在性能上往往不及C++底层库。然而,Python在某些领域如数据分析、机器学习中,凭借其高级别抽象和简洁语法仍表现出色。选语言需依据具体应用场景和需求综合考量。
WK
877 1

推荐镜像

更多