leetcode-26删除有序数组中的重复项(双指针)「建议收藏」

leetcode-26删除有序数组中的重复项(双指针)「建议收藏」原题链接给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicate

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

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

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {

print(nums[i]);
}

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [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]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
 

提示:

0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按升序排列

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

双指针

class Solution { 
   
public:
    int removeDuplicates(vector<int>& nums) { 
   
        if(nums.empty())return 0;
        int i = 1,j = 1;
        while(j < nums.size()){ 
   
            if(nums[j] != nums[j - 1])
                nums[i ++] = nums[j];
            j ++;
        }
        return i;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168752.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月8日 下午2:16
下一篇 2022年8月8日 下午2:36


相关推荐

  • annotate标注解释

    annotate标注解释标注 nbsp 基本标注使用 text 会将文本放置在轴域的任意位置 文本的一个常见用例是标注绘图的某些特征 而 annotate 方法提供辅助函数 使标注变得容易 在标注中 有两个要考虑的点 由参数 xy 表示的标注位置和 xytext 的文本位置 这两个参数都是 x y 元组 nbsp coding utf 8importnumpy

    2026年3月17日
    2
  • Android下载apk异常java.net.SocketTimeoutException: timeout解决办法

    Android下载apk异常java.net.SocketTimeoutException: timeout解决办法1、问题实现下载apk的时候,抛出下面异常java.net.SocketTimeoutException:timeout2、分析很明显是socket超时了,由于我的wifi网络比较慢,设置的超时时间可能短了。在写入由GetRequestStream方法返回的流时,或在读取由GetResponseStream方法返回的流时,会用到ReadWriteTimeout属性,ReadWrite…

    2022年8月31日
    8
  • 如何关闭开启硬件加速[通俗易懂]

    如何关闭开启硬件加速       硬件加速是windwos一个图像显示优化功能。它会使计算机图像显示更快速,但在某些游戏、软件里面如果开启硬件加速,会导致黑屏或影像无法正常显示问题,这个时候就应该关闭这个功能了。Windows7方法/步骤  首先是开启电脑,并返回到桌面(CTRL+D)  在桌面空白处点击击鼠标右键→选择属性→点击设置选项卡→在点击高级命令按钮→在单…

    2022年4月18日
    116
  • sklearn库的安装教程

    sklearn库的安装教程sklearn 库的简介 sklearn 库 sklearn 是 scikit learn 的简称 是一个基于 Python 的第三方模块 sklearn 库集成了一些常用的机器学习方法 在进行机器学习任务时 并不需要实现算法 只需要简单的调用 sklearn 库中提供的模块就能完成大多数的机器学习任务 sklearn 库是在 Numpy Scipy 和 matplotlib 的基础上开发而成的 因此在介绍 sklea

    2026年3月19日
    2
  • linux 添加磁盘 LVM扩容步骤「建议收藏」

    linux 添加磁盘 LVM扩容步骤「建议收藏」LinuxLVM扩容一般步骤以centos7.8为例准备工作:添加硬盘完成硬盘添加,虚拟机重启执行lsblk就可以看到新添加硬盘不重启服务器识别新添加硬盘ls/sys/class/scsi_host/echo”—“>/sys/class/scsi_host/host*/scan具体如下#查看是否有新加硬盘lsblkfdisk-l对新硬盘分区fdisk/dev/sdbn#新建分区p#选择逻辑分区1

    2022年6月20日
    28
  • java 的double转BigDecimal的坑

    java 的double转BigDecimal的坑大家都知道java的double由于精度问题会给你挖无数个坑,一般采取的方式都会避免使用,但是android的dbflow对model里面的BigDecimal转换为sqlitetable时,fieldtype居然是text.所以,model里面field的属性只能保持double那么,先测试一下:doubled=3.1415;…

    2022年5月27日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号