推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址
  • 我的个人博客
  • QQ群:1040082875

大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。

一、题目

1、算法题目

“将给定的有序数组删除重复出现的元素,使每个元素只出现一次,返回删除后数组的长度。”

题目链接:

来源:力扣(LeetCode)

链接:26. 删除有序数组中的重复项 - 力扣(LeetCode) (leetcode-cn.com)

2、题目描述

给你一个有序数组 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 。不需要考虑数组中超出新长度后面的元素。

二、解题

1、思路分析

这个题可以使用双指针思路解题,对于有序的数组nums,如果 i = k = j,那么必有nums[i]=nums[k]=nums[j],因为相等的元素在数组中的下标一定是连续的,可以利用这个特点删除重复元素。

定义两个指针fast和slow分别为快指针和慢指针,快指针遍历数组到达的下标位置,慢指针表示下一个不同元素要填入的下标位置。

对于每个位置来说,需要达到nums[fast]≠nums[fast-1],这样就说明元素不重复,这时候就可以将nums[fast]复制给nums[slow],然后将slow值加1,也就是指向下一个位置。

遍历结束,数组中的每个元素都不相同且包含数组中不同的元素,因此新的数组的长度为slow,返回slow即可。

2、代码实现

代码参考:

public class Solution {public int RemoveDuplicates(int[] nums) {if(nums.Length == 0){return 0;}int slow = 0, fast = 1;while(fast < nums.Length){if(nums[fast] != nums[slow]){slow = slow + 1;nums[slow] = nums[fast];}fast = fast + 1;}return slow + 1;}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xYJHea6-1658998795325)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/318c5895b3074f3ba831d9961832b8c4~tplv-k3u1fbpfcp-watermark.image?)]

3、时间复杂度

时间复杂度 : O(n)

其中n是数组的长度。

空间复杂度: O(1)

只需要使用常数的额外空间。

三、总结

使用快慢指针的方法即可,还要啥自行车。

【打卡算法】 26、删除有序数组中的重复项 算法解析相关推荐

  1. 8. Leetcode 26. 删除有序数组中的重复项 (数组-同向双指针-快慢指针)

    给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件 ...

  2. [leetcode]26.删除有序数组中的重复项

    给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条 ...

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

    给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条 ...

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

    题目描述: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 . 由于在某些语言中不能改变数组 ...

  5. 文巾解题 26. 删除有序数组中的重复项

    1 题目描述 2 解题思路 一般来说,原地修改数组的题目,大多数是用快慢数组完成的. class Solution:def removeDuplicates(self, nums: List[int] ...

  6. 【LeetCode笔记】26. 删除有序数组中的重复项(Java、原地)

    文章目录 题目描述 代码 & 思路 题目描述 看到群友说今天的每日是简单题,我啪的一下就开刷了,很快啊! 注意点:原地 & O(1)空间 代码 & 思路 有点类似移动零,就是把 ...

  7. 【leetcode刷题记录】26.删除有序数组中的重复项

    class Solution {public int removeDuplicates(int[] nums) {int index = 0;for(int i = 0; i < nums.le ...

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

    https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 解决方案 class Solution {public in ...

  9. 【数据结构与算法】之深入解析“删除有序数组中的重复项”与“移除元素”的求解思路与算法示例

    删除有序数组中的重复项 一.题目要求 给你一个升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度.元素的相对顺序应该保持 一致 . 由于在某些语言中不 ...

  10. LeetCode算法 删除有序数组中的重复项 删除有序数组中的重复项|| C++

    目录 题目 删除有序数组中的重复项 参考答案 题目 删除有序数组中的重复项|| 参考答案 题目 删除有序数组中的重复项 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ...

最新文章

  1. c语言文件归并问题_C语言 | 选择法对10个数排序
  2. 导出EXCEL2003
  3. Java 23种设计模式案例:原则及分类
  4. java final 修改_“无法改变的设计”——浅谈Java中的final关键字
  5. 注解 @ModelAttribute 运用详细介绍
  6. c语言百文百鸡问题答案,python_百文买百鸡问题
  7. 吴恩达机器学习(九)Precision、Recall、F-score、TPR、FPR、TNR、FNR、AUC、Accuracy
  8. 如何批量修改公式的字体
  9. scrapy爬虫框架入门实战
  10. ogre的主要渲染流程(转)
  11. error C2664: “StrCmpW”: 不能将参数 2 从“const char [12]”转换为“PCWSTR”
  12. pip安装tensorflow_Tensorflow源代码编译踩坑若干
  13. 菜鸟晋级必修 智能手机越狱/解锁/刷机完全教程
  14. 数据人必会的Excel|还在给老板看苍白无力的数据?有了这份Excel炫酷的报表,还愁不升职加薪?
  15. android怎么测试网速,怎样用手机测网速 安卓手机测网速的方法推荐
  16. 拼多多业绩增长难继,品牌形象陷于信任危机
  17. JavaScript点名器
  18. SynchronizedMonitor总结
  19. 春晚宫女唐奕霖被爆背景深厚 可携助手出入央视排练场享有特权
  20. Win11的Credential Manager怎么打开?

热门文章

  1. Mysql之Specified key was too long; max key length is 767 bytes
  2. JAVA中Long与Integer踩的坑
  3. ROS激光SLAM导航理解
  4. 美术☀️PR去掉视频黑边、旋转视频、减小视频体积、设置视频封面
  5. 鼠标右键没有word、excel/右键不能新建word、ppt等office
  6. 计算机专业入学教育报告,信息工程学院20级计算机专业入学教育大会和专业介绍会顺利召开...
  7. 图片如何无损放大?图片放大不失真的神器
  8. Kinetics-400数据集分类名中英文对照汇总
  9. 洛谷 P4173 残缺的字符串 (FFT)
  10. windows-sys:21:windows系统(win7 win10 win11)设置护眼色详细过程