vue删除数组中的一条数据_删除排序数组中的重复项 II

删除排序数组中的重复项 IId1de57178e8842ea7189a4053a35f892.gif题目

给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次返回移除后数组的新长度

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

例子

示例1

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

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

示例2

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

示例3

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

输出:2, nums = [1,1]
解题思路

这道题目其实是前面我们有聊过的“删除排序数组中的重复项“的进阶版,其实我们直接的思路大体相似,无非这道题目是使每个元素最多出现两次,当然代码实现上会稍微复杂一些,注意的条件也比较多。

思路一:我们还是遍历数组,我们可以从第三个元素开始遍历,当nums[i]==nums[i-2]时,即这三个元素完全相等时,我们可以往后面找,找到一个和nums[i]不相同的元素为止,将这后面这一串往前挪,这里就要注意不同情况,当往后找的过程中如果找不到,那就应该直接返回i,例如nums=[1,1,1,1,1];如果找到了,我们移动的的时候也要注意,我们先定义个变量标记移动了多少位,然后进行赋值,赋值完后“数组的长度”其实也是分两种情况的,例如nums=[1,1,1,1,1,2,3,4,5],我们移动后变成nums={1,1,2,3,4,5,3,4,5},但是我们应该只取前6位,例如nums={1,1,1,1,1,2},我们移动后变成nums={1,1,2,1,1,2},但是我们应该只取前2位;这就是两只不同情况,具体大家可以结合下面图示和代码仔细揣摩一下。所以我们移动完后,要改变遍历的数组长度,直至遍历结束,i就是需要返回的数组长度。

c475c0115e123532367f38e36e9f9957.png

思路二:上述我们其实貌似不用这么复杂,我们定义两个指针n,i,一个负责往后遍历,一个记录当前“新数组“需要存放的最新位置,当往后遍历的过程中发现当索引下标的值不等于前面第二个元素时,则将数组记录需要存放的最新位置设置成当前元素,以此类推返回i即为数组长度,大家可以结合如下代码仔细思考一下,再尝试着自己去实现。

删除排序数组中的重复项

MR.Zhu,公众号:1024和996删除排序数组中的重复项
代码实现
/** * leetcode 80 */public class Solution {    /**     * 方法一     *     * @param nums     * @return     */    public int removeDuplicates(int[] nums) {        if (nums == null || nums.length == 0) {            return 0;        }        if (nums.length < 3) {            return nums.length;        }        int i = 2;        int length = nums.length;        while (i < length) {            if (nums[i] == nums[i - 2]) {                int flag = i;                int point = i;                while (point + 1 != length && nums[point] == nums[point + 1]) {                    point++;                }                //没找到,则返回                if (point + 1 == length) {                    return i;                }                //移动赋值                for (int j = point + 1, k = 0; j < length; j++, k++) {                    nums[flag + k] = nums[j];                }                //判断有效长度                if (length - point - 1 < point - i) {                    length = i + (length - point - 1);                } else {                    length = length - (point + 1 - i);                }            }            i++;        }        return i;    }    /**     * 方法二     * @param nums     * @return     */    public int removeDuplicates2(int[] nums) {        int i=0;        for(int n:nums){            if(i<2){                i++;                continue;            }            if(n!=nums[i-2]){                nums[i]=n;                i++;            }        }        return i;    }    public static void printArr(int[] arr) {        for (int num : arr) {            System.out.print(num + "\t");        }        System.out.println();    }    public static void main(String[] args) {        int nums[] = { 0, 1, 1, 1, 1, 2, 3, 3, 3, 4 };        System.out.println("方法一删除重复项后数组长度:" + new Solution().removeDuplicates(nums));        System.out.println("方法一删除重复项后数组为:");        printArr(nums);        int nums2[] = { 0, 1, 1, 1, 1, 2, 3, 3, 3, 4 };        System.out.println("方法二删除重复项后数组长度:" + new Solution().removeDuplicates2(nums2));        System.out.println("方法二删除重复项后数组为:");        printArr(nums2);           }}
运行结果

c71d515242219b5e977a0c69539491af.png

45ce83255bd482f5d1e499efda90a81e.png276afda95dff4a74f40c416d45e67f0c.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase

关于微服务的资料很多&#xff0c;只是用谷歌搜索就可以了 &#xff01; 几年前&#xff0c;我在比利时的Devoxx上发表了有关将单片重构为微服务的演讲&#xff0c;它得到了很好的评价&#xff1a; 该博客将展示Docker如何简化微服务的创建和关闭。 该博客中使用的所有代码都…

基于图像灰度的模板匹配

基于图像灰度的模板匹配 设模板图像T&#xff08;m*n&#xff09;&#xff0c;待匹配图像I&#xff08;M*N&#xff09;&#xff0c;两幅图像的原点都在左上角&#xff0c;这里有&#xff08;m<M&#xff0c;n<N&#xff09;。模板匹配的基本原理很简单&#xff1a;模板图…

学习activemq,在spring中activemq的配置信息

提供者&#xff1a; <?xml version"1.0" encoding"UTF-8"?><beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:jms"http://www.springframewor…

pca各个向量之间的相关度_PCA主成分分析

降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征&#xff0c;去除噪声和不重要的特征&#xff0c;从而实现提升数据处理速度的目的。降维的算法有很多&#xff0c;比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA…

matlab 图像坐标系

matlab 图像中图像坐标系与plot、 imrotate坐标系的区别 图像坐标系是以图像左上角为原点&#xff0c;访问图像像素点img&#xff08;m&#xff0c;n&#xff09;&#xff0c;如下图所示&#xff1a; plot的坐标系&#xff0c;以图像左上角为原点&#xff0c;在图像中划线时&am…

matlab impyramid图像金字塔

B impyramid&#xff08;I, direction&#xff09; direction 可取‘reduce’或‘expand’&#xff0c;表示图像的宽度与高度缩小为原来的1/2与变大为原来的2倍

python你会吗_Python这些问题你会吗?

Python这些问题你会吗&#xff1f;final作用域的代码一定会被执行吗&#xff1f;正常的情况下&#xff0c;finally作用域的代码一定会被执行的&#xff0c;不管是否发生异常。哪怕是调用了sys.exit函数&#xff0c;finally也是会被执行的&#xff0c;那怎么样才能让finally代码…

perl大骆驼和小骆驼_你好骆驼:自动文件传输

perl大骆驼和小骆驼Apache Camel在其主页上 &#xff08;以及Camel用户指南中 &#xff09;将其描述为“基于已知企业集成模式的通用开源集成框架”。 Camel框架基于《 企业集成模式 》一书&#xff0c;并提供了该书中描述的模式的实现 。 我看一下这篇文章中使用Camel的“ Hel…

Django实战1-权限管理功能实现-01:搭建开发环境

1 项目开发环境 语言环境&#xff1a; python3.6.2 , django-2.1.2数据库环境&#xff1a;sqlite3(开发环境使用&#xff0c;部署环境使用mysql5.6)开发工具&#xff1a;pycharm2 安装python 说明&#xff1a;已经安装过python3.6环境的可以跳过此步。 python安装包下载地址&a…

matlab imhist灰度直方图

imhist()函数显示图像直方图要求图像是二维的灰度图像。 1.h imhist&#xff08;I&#xff09;:直接显示灰度图像I的直方图 2.h imhist(I,b):b是用来形成直方图的‘容器’的数目,默认256。 3.h imhist(X,map):显示索引图像的直方图&#xff0c;此直方图显示颜色映射图上色…

python语言程序设计计算机二级难不难_全国计算机二级的难度有多大?

计算机二级任选一科目考试及格即可获取计算机二级证书。自2019年3月考试起&#xff0c;二级语言类及数据库类科目(即除MS Office高级应用外的其他二级科目)调整获证条件为&#xff1a;总分达到60分且选择题得分达到50%及以上(即选择题得分要达到20分及以上)的考生方可取得合格证…

Jacobian 和Hessian矩阵

雅克比&#xff08;Jacobian matrix&#xff09;矩阵&#xff1a;目标函数f为一个函数向量&#xff0c;f(f1(x),f2(x),…fm(x))T&#xff0c;自变量x(x1,x2,…,xn)T&#xff1b;函数向量f对x求梯度&#xff0c;结果为一个矩阵&#xff1b;行数为f的维数&#xff1b;列数位x的维…

循环语句 for循环、while循环、do while循环

循环语句可以在满足循环条件的情况下&#xff0c;反复执行某一段代码&#xff0c;这段被重复执行的代码被称为循环体语句&#xff0c;当反复执行这个循环体时&#xff0c;需要在合适的时候把循环判断条件修改为false&#xff0c;从而结束循环&#xff0c;否则循环将一直执行下去…

获取按钮点击次数_无限次数使用,不会吧?不会吧?

就目前来说国内设计教程的网站虎课网还是很不错的里面的教程都很丰富但无奈的是普通用户每天只能学习一个课程想要学习多点就要充值而且会员只能开通年费对于只需偶尔学习一下的小伙伴来说可能太浪费了所以今天来大家分享一个超好用的浏览器插件官网看(适用平台&#xff1a;Chr…

现代化历险记:策略+将COBOL转换为Java的示例

在Keyhole Software&#xff0c;我们在很大程度上是一家现代化公司。 我们拥有一些顾问&#xff0c;他们专门研究将旧的代码迁移到新的&#xff0c;翻新的残旧代码库&#xff0c;并为大多数已经被供应商锁定的企业设计更光明的未来。 作为这些经验的有趣的副作用&#xff0c;我…

String类的特点和使用步骤

概述 java.lang.String 类代表字符串。Java程序中所有的字符串文字&#xff08;例如 "abc" &#xff09;都可以被看作是实现此类的实例 类 String 中包括用于检查各个字符串的方法&#xff0c;比如用于比较字符串&#xff0c;搜索字符串&#xff0c;提取子字符串以及…

Ostu最大类间差方法

Ostu方法又名最大类间差方法&#xff0c;通过统计整个图像的直方图特性来实现全局阈值T的自动选取&#xff0c;其算法步骤为&#xff1a; 1) 先计算图像的直方图&#xff0c;即将图像所有的像素点按照0~255共256个bin&#xff0c;统计落在每个bin的像素点数量 2) 归一化直方图…

pads 文本不能修改_斜框检测经典网络(文本)- R2CNN

论文题目&#xff1a;R2CNN&#xff1a;Rotational Region CNN for Orientation Robust Scene Text Detection论文来源&#xff1a;2017CVPR论文地址&#xff1a;https://arxiv.org/abs/1706.09579论文代码&#xff1a;https://github.com/DetectionTeamUCAS/R2CNN_Faster-RCNN…

【题解】炮兵阵地

【题解】炮兵阵地 luogu 题解 暴力状压记录上一行和上上行信息&#xff0c;暴力判断是否存在不合法的阵地&#xff0c;暴力滚动数组&#xff0c;暴力统计&#xff0c;暴力转移即可。 看了yyb代码&#xff0c;我感觉我不曾写过代码... 加入说不要那么暴力也可以&#xff0c;可以…

matlab reshape矩阵维度变换

B reshape(A,m,n) 将矩阵A的元素返回到一个mn的矩阵B。如果A中没有mn个元素则返回一个错误。 B reshape(A,m,n,p,...) or B reshape(A,[m n p ...]) 把A中元素进行重塑成mnp…的矩阵&#xff0c;特别地&#xff0c;指定的维数mnp…的积必须与prod(size(A))相同。 …