题目描述:

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

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

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案int k = removeDuplicates(nums); // 调用assert k == expectedNums.length;
for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[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 已按 升序 排列

题解一(双指针):

class Solution {public int removeDuplicates(int[] nums) {//设置双指针,第0位数组元素肯定是独特的,所以从1开始int fast = 1;    //快指针,寻找不重复的数组元素int slow = 1;    //慢指针,指定不重复数组元素的下标位置//当数组元素为空,直接返回0;当数组中只有一个元素,返回1。 if(nums.length == 0)    return 0;if(nums.length == 1)    return 1; //fast指针向后寻找不重复元素,并存入slow指定的下标位置中for(fast = 1 ;fast < nums.length ; fast++){if(nums[fast] != nums[fast-1]){nums[slow]=nums[fast];slow++;}             }//最后得到的slow的值就是不重复元素个数return slow;}
}

运行详情:

题解二(更简洁):

class Solution {public int removeDuplicates(int[] nums) {int t = 0;for (int i = 0; i < nums.length; i ++ ) {if (i == 0 || nums[i] != nums[i - 1]) nums[t ++ ] = nums[i];}return t;}
}

其他:

开始一直在硬算,知道双指针这个方法后才能算是有了一点思路,顺着大佬的思路自己慢慢敲。

力扣 26.删除有序数组中的重复项相关推荐

  1. 力扣 26.删除有序数组中的重复元素

    文章目录 题目 思路 AC代码 收获 题目 删除有序数组中的重复元素 思路 快慢指针.快指针不断向前走.判断快指针所指的数与快指针前面的数是否相等,如果相等就说明是重复的,要继续向后移动,如果不相等, ...

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

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

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

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

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

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

  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. 力扣26--删除有序数组中的重复项

    题目 python代码 def removeDuplicates(nums):n = len(set(nums))i = 0while i < n:if nums[i] == nums[i+1] ...

最新文章

  1. 迈出编程第一步!必知必会的10个编程技巧及查错方法
  2. ES logstash7.4.2 mysql 数据同步
  3. 学校计算机数据采集处理系统,一种计算机数据采集处理分析系统的制作方法
  4. pipline中替换tag变量
  5. 链表之单链表约瑟夫问题(二)
  6. Python学习入门基础教程(learning Python)--5.7 Python文件数据记录存储与处理
  7. 花生壳内网穿透实践指南
  8. 电机学(2) - 变压器
  9. Java学习笔记(一):Java基础
  10. 关于DynamipsGUI
  11. 无密码解锁iPhone
  12. Android 高仿微信群聊头像
  13. 【Android】四大组件介绍 *广播机制*
  14. 云痕大数据 家长登录_云痕大数据平台的使用对初中英语教与学的作用
  15. r语言t检验输出检验统计量_R语言的各种检验
  16. 股票交易一点感悟和程序化交易实战
  17. 股权和更高的薪资应该选哪个呢?
  18. 【模型部署】NNI:剪枝和量化
  19. 头条搜索下拉词怎么做?高粱seo实战告诉你答案
  20. 2.Python-简单数据类型

热门文章

  1. 无线路由器经常掉线断网的可能的原因
  2. Word中使用MathType批量调整文档公式的大小
  3. 「好书推荐」《边城》沈从文的乡土情怀代表作,汪曾祺、林徽因、曹文轩等真情推荐!
  4. Matlab 图像像素级标注
  5. 【量化投资】策略二(聚宽)
  6. Unity学习 HTC Vive Hi5 2.0
  7. 如何在工作中提升自己
  8. 2022鲁大师评测沟通会开启汽车评测新赛道
  9. DIY制作高精度低温漂电阻箱0.1~9.9GΩ(1)-- 项目介绍
  10. 早上在玩支付宝的答答星球,认真点就有点赌徒心理了