当前位置:网站首页>LeetCode每日一练 —— 26. 删除有序数组中的重复项
LeetCode每日一练 —— 26. 删除有序数组中的重复项
2022-07-26 18:33:00 【飞向星的客机】
前言
Wassup guys!我是Edison
今天是 LeetCode 上的 leetcode 26. 删除有序数组中的重复项
Let’s get it!

1. 题目分析
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O ( 1 ) O(1) O(1) 额外空间的条件下完成。
其实这道题的根本就是 去重,把数组里面重复的元素删除掉,只保留一个
示例 1:
示例 2:
2. 题目图解
首先这道题可以使用 双指针 法;
首先,让 src 指向的元素,与 src-1 (也就是 src 的前一个元素)指向的元素相比较,如果 src 指向的元素与 src-1 指向的元素相等,那么 src 就向后挪动一位;
如果不相等,那么就把 src-1 指向的元素赋给 dst 的位置上去,然后 src 和 dst 同时向后挪动一位。
听起来可能有点绕?别慌,跟着图来一步一步的看!
但是稍微有点不同的就是,指针 src 指向下标为 1 的位置,指针 dst 还是指向起始位置,如图所示
一开始 src 指向的元素和 src-1 指向的元素都是 0,也就是说 src 与 src-1 指向的元素相等,如图所示
那么就把 src 往后挪动一位,dst 不变,如图所示
此时 src 指向的元素是 1,src-1 指向的元素是 0,它们的值不相等,那么就把 src-1 指向的元素赋给 dst 的位置上去;
然后 src 和 dst 同时向后挪动一位,如图所示
此时 src 指向的元素是 1,src-1 指向的元素是 1,它们的值相等;
那么 src 就往后挪动一位,dst 不变,如图所示
此时 src 指向的元素是 2,src-1 指向的元素是 1,它们的值不相等,那么就把 src-1 指向的元素赋给 dst 的位置上去;
然后 src 和 dst 同时向后挪动一位,如图所示
此时 src 指向的元素是 2,src-1 指向的元素也是 2,它们的值相等
那么 src 就往后挪动一位,dst 不变,如图所示
此时 src 指向的元素是 3,src-1 指向的元素是 2,它们的值不相等,那么就把 src-1 指向的元素赋给 dst 的位置上去;
然后 src 和 dst 同时向后挪动一位,如图所示
此时 src 已经指向数组外面去了,那么就直接把最后一个值赋给 dst,然后 dst 再向后挪动一位
因为你要把一个值放过去,那么一定是把这段区间走完,走到它下一个位置,跟上一个值不相等的时候,才会放过去
所以这道题的结构设计如下
这道题的本质就是 src 跟 src-1 的位置的值,不相等时,前一段重复值区间已经走完了,那么把最后一个保留放到 dst 的位置。
3. 代码实现
接口代码
int removeDuplicates(int* nums, int numsSize){
int dst = 0;
int src = 1;
while (src < numsSize) {
if (nums[src-1] == nums[src]) {
src++;
}
else {
nums[dst] = nums[src-1];
src++;
dst++;
}
}
nums[dst] = nums[numsSize-1]; // 把最后一个值赋给dst
return ++dst; // dst要向后挪动一位
}
提交结果
边栏推荐
- openstack 虚拟机网卡被重名为cirename0
- 手机app测试用例怎么写?手机app测试点有哪些?
- Volatile keyword of JVM memory model
- What is federated graph machine learning? A summary of the latest "federal map machine learning: concepts, techniques, and Applications" at the University of Virginia
- UIAutomator2常用类之UiObject2
- 如何保护电子商务网站免受网络攻击?
- After working for 13 years, I have a little software testing experience and feelings
- Difficult performance problems solved in those years -- ext4 defragmentation
- 2022 build enterprise level data governance system
- Spatiotemporal prediction 4-graph WaveNet
猜你喜欢

B站SRE负责人亲述 713事故后的多活容灾建设|TakinTalks大咖分享

这22个绘图(可视化)方法很重要,值得收藏!

Advantages of advanced anti DDoS IP in Hong Kong and which industries are suitable for use

服务器内存故障预测居然可以这样做

Redis6

MySQL tutorial: MySQL database learning classic (from getting started to mastering)

还在用Xshell?你out了,推荐一个更现代的终端连接工具

Linear algebra Chapter 4 linear equations

jar文件 反编译(IDEA环境)

数据湖--概念、特征、架构与案例概述
随机推荐
博客维护记录之图片预览嵌入位置问题
关于接口测试你想知道的都在这儿了
[server data recovery] data recovery case of server storage shared folder loss
C#上位机开发—— 修改窗口图标和exe文件图标
torch.unsqueeze() squeeze() expand() repeat()用法及比较
Spatiotemporal prediction 4-graph WaveNet
调整数组顺序使奇数位于偶数前面且相对位置不变
What do indicators and labels do
基于华为云 IOT 设计智能称重系统 (STM32)【二】结尾有资料
EN 1504-6 products for protection and repair of concrete structures - reinforcement anchorage - CE certification
Solidity中call函数详解
Vs2019 export import configuration
IJCAI2022开会了! Brescia等《证据推理和学习》教程,阐述其最新进展,附96页Slides
Principle analysis and source code interpretation of service discovery
2022/07/26 学习笔记 (day16) 抽象与接口
Detailed tutorial on installing redis on Linux
"Weilai Cup" 2022 Niuke summer multi school training camp 1
Detailed explanation of call function in solidity
Linear algebra Chapter 3 vector
这22个绘图(可视化)方法很重要,值得收藏!