首页 > 编程语言 >程序分享--常见算法/编程面试题:删除有序数组中的重复项 II

程序分享--常见算法/编程面试题:删除有序数组中的重复项 II

时间:2024-06-02 22:57:21浏览次数:23  
标签:面试题 nums -- 元素 II int 数组 长度

关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。
或关注博主免费专栏【程序员宝典--常用代码分享】里面有大量面试涉及的算法或数据结构编程题。

-------------------------------------正文----------------------------------------

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

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

说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

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

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

-------------------------------------答案----------------------------------------

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int slow = 2, fast = 2;
        int len = nums.size();
        if(len <= 2) {
            return len;
        }
        for(;fast < len;fast++) {
            if(nums[slow-2] != nums[fast]) {
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }
};

感兴趣的同学辛苦 关注/点赞 ,持续分享逻辑、算法、管理、技术、人工智能相关的文章。

博主其它经典原创:《管理心得--如何高效进行跨部门合作》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》,及
C#实例:SQL如何添加数据》,《C#实战分享--爬虫的基础原理及实现》欢迎大家阅读。

标签:面试题,nums,--,元素,II,int,数组,长度
From: https://blog.csdn.net/weixin_60437218/article/details/138286478

相关文章

  • 股票问题(多次买卖),动态规划
     publicstaticintMaxProfit(int[]prices){intpriceSize=prices.Length;int[,]dp=newint[priceSize,2];//同一天有两种状态,[i,0]为第i天没有股票的利润,[i,1]为i天持有股票的利润dp[0,0]=0;dp[0,1]=-prices[0];//初始化,第一天没有进行股票交易为0,第一天买入股......
  • 如何使用Node.js、TypeScript和Express实现RESTful API服务
    Node.js是一个基于ChromeV8引擎的JavaScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。Express是一个保持最小规模的灵活的Node.jsWeb应用程序开发框架,为Web和移动应用程序提供一组强大的功能。使用Node.js和Express可以快速的实现一个......
  • 第十五届蓝桥杯大赛软件赛国赛 C/C++ 大学 A 组 游记
    Preface前情提要:去年圈钱杯国赛游记,本来还想着今年报JAVA/PY的,结果语法一个学不懂还是去CPP组开卷了省赛很简单但因为最后一题看漏条件了还是遗憾离场,但也给了我一种今年篮球杯水的一批的刻板印象然后国赛被一堆数学题直接创飞了,但好在前面几个题还能胡几个做法出来,但FWT和神秘......
  • KMP算法
    KMP算法KMP算法是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法。重点是找到字符串的最长公共前后缀。用最长公共前后缀在匹配的同时,实现快速跳转。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintINF=0x3f3f3f3f;......
  • 视野修炼-技术周刊第86期 | CSS 马里奥
    欢迎来到第86期的【视野修炼-技术周刊】,下面是本期的精选内容简介......
  • Shell 脚本演示 Linux 中的 Wait 命令
    Wait命令是进程管理命令之一。Linux中有不同的进程命令,主要使用5个命令,它们是ps、wait、sleep、kill、exit。ps是进程状态的缩写。它显示有关活动进程的信息。wait命令将暂停调用线程的执行,直到其子进程之一终止。它将返回该命令的退出状态。sleep命令用于将下一个命令的执行......
  • 代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众
    530.二叉搜索树的最小绝对差题目链接文章讲解视频讲解关键词:二叉搜索树-->中序遍历关于递归的返回值  由于需要遍历整棵二叉树,所以返回值为void,如果不是遍历整棵二叉树,需要在得到结果时立即返回结果,此时返回值才不为空怎样使用两个指针pre和cur使得pre始终指向cur的前......
  • Shell阶段10 awk工作原理, 内部变量, 正则/比较/条件/逻辑表达式, 判断语句, 循环语
    AWK什么是awkawk是一个编程语言主要作用:对文本和数据的处理awk处理数据的流程1.扫描文件内容,从上到下进行扫描,按照行进行处理2.寻找匹配到的内容,进行读取到特定的模式中,进行行处理3.行满足指定模式动作,则输出到屏幕上面,不满足丢弃4.接着读取下一行继续处理,接着循环,直......
  • MySQL进阶之索引
    1索引概述  索引(index)是帮助MySOL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。  索引的优缺点优势劣势......
  • 小程序抓包实战:Fiddler配置与使用详细
    实验环境FiddlerClassic微信(3.9.10.27)步入正题一,既然要抓包当然我们得先下载了,点击FiddlerClassic即可下载,下载完成后一路下一步就行;二,Fiddler配置,依次打开Tools>Options>HTTPS,勾选图中三项即可如果出现证书提升直接按照;三,设置代理端口以及允许计算机连接,......