力扣26(java&python)-删除有序数组中的重复项(简单)
题目:
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
判题标准:
系统会用下面的代码来测试你的题解:
1 int[] nums = [...]; // 输入数组
2 int[] expectedNums = [...]; // 长度正确的期望答案
3
4 int k = removeDuplicates(nums); // 调用
5
6 assert k == expectedNums.length;
7 for (int i = 0; i < k; i++) {
8 assert nums[i] == expectedNums[i];
9 }
如果所有断言都通过,那么您的题解将被 通过。
示例 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.length <= 3 * 104
- -104 <= nums[i] <= 104
- nums 已按 升序 排列
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
【双指针】
输入的数组是有序的,那么重复的元素就是相邻的,题目中说了在原地修改输入的数组,删除重复的元素,实际上就是将不重复的元素放在数组的最左侧。
使用双指针,i = 0,j = 1,比较 nums[i]和 nums[j] 是否相等:
- 如果nums[i] == nums[j]:j 后移一位,即 j++;
- 如果nums[i] != nums[j]:先将 i 后移一位,然后将nums[j]复制给nums[i];
- 循环结束的条件是:当 j == nums.length;
- 最后返回的是不重复数组的长度即 i + 1
java代码:
1 class Solution {
2 public int removeDuplicates(int[] nums) {
3 int n = nums.length;
4 int i = 0, j = 1;
5 while (j < n){
6 if (nums[i] != nums[j]){
7 nums[++i] = nums[j];
8 }
9 j++;
10 }
11 return i+1;
12 }
13 }

python3代码:--通用解法最多保留1位
1 class Solution:
2 def removeDuplicates(self, nums: List[int]) -> int:
3 count, i = 0, 0
4 for j in range(1, len(nums)):
5 if nums[j] == nums[i]:
6 count += 1
7 else :
8 count = 0
9 # 1就是可重复的次数
10 if count < 1:
11 i += 1
12 nums[i] = nums[j]
13 return i + 1

2023-04-21二刷:运用双指针---快慢指针
1 class Solution {
2 public int removeDuplicates(int[] nums) {
3 int slow = 0;
4 for (int fast = 1; fast < nums.length; fast++){
5 if (nums[slow] != nums[fast]){
6 nums[++slow] = nums[fast];
7 }
8 }
9 return slow + 1;
10 }
11 }
力扣26(java&python)-删除有序数组中的重复项(简单)的更多相关文章
- 【python】Leetcode每日一题-删除有序数组中的重复项
[python]Leetcode每日一题-删除有序数组中的重复项 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现一次 ,返回删除后数组的新长度. 不要 ...
- 【python】Leetcode每日一题-删除有序数组中的重复项2
[python]Leetcode每日一题-删除有序数组中的重复项2 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不 ...
- 【LeetCode】26. 删除有序数组中的重复项
26. 删除有序数组中的重复项 知识点:数组:排序:双指针: 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的 ...
- 【LeetCode】80. 删除有序数组中的重复项 II
80. 删除有序数组中的重复项 II 知识点:数组:排序:双指针: 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不要使 ...
- [LeetCode每日一题]80. 删除有序数组中的重复项 II
[LeetCode每日一题]80. 删除有序数组中的重复项 II 问题 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不要使用额外 ...
- 删除有序数组中的重复项II
题目描述 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素最多出现两次,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组 并在使用O(1)额外空间的条件下 ...
- 80. 删除有序数组中的重复项 II
题目 给你一个有序数组 nums ,请你原地删除重复出现的元素(不需要考虑数组中超出新长度后面的元素),使每个元素最多出现两次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入 ...
- Leetcode26——删除有序数组中的重复项(双指针法)
Leetcode26--删除有序数组中的重复项(双指针法) 1. 题目简述 给你一个升序排列的数组 nums ,请你原地 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度.元素的相对 ...
- LeetCode(26): 删除排序数组中的重复项
Easy! 题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间 ...
- [LeetCode]26.删除有序数组中的重复项(Java)
原题地址: remove-duplicates-from-sorted-array 题目描述: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的 ...
随机推荐
- 英语字母z解析.drawio
英语字母z解析.drawio
- 修改校准debain/manjaro的时间时钟
一次重启后发现时间竟然从上午变成了晚上!要问,我是怎么发现在的我就是发现上午的时候我的屏幕夜灯突然出现了 使用命令 sudo rm -f /etc/localtime删除本地时间文件 sudo cp ...
- Oracle注入—报错注入
Oracle注入-报错注入 1.Oracle报错注入知识扫盲 一.Oracle报错注入知识扫盲 报错注入 报错注入就是,输入的一些能让数据库出错的语句,数据库会把这个错误回显给我们 OK,,什么语句能 ...
- [置顶]
linux与windows之间传输文件工具rz上传大文件失败问题解决方案
rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. windows端需要支持ZModem的telnet/ssh客户端(比如SecureCRT),运行命令rz即是接收 ...
- 你是怎么理解ES6中 Generator的?使用场景?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.介绍 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同 回顾下上文提到的解决异步的手段: 回 ...
- ElasticSearch中_source、store_fields、doc_values性能比较【转载】
原文地址请点击 在这篇文章中,我想从性能的角度探讨ElasticSearch 为我们存储了哪些字段,以及在查询检索时这些字段如何工作.实际上,ElasticSearch和Solr的底层库Lucene提 ...
- 慎用django orm的update_or_create方法
公司一个线上招聘项目,后端采用Django开发,数据库使用MySQL.最近一次线上招聘会活动,因短时间大量用户涌入,被吐槽服务响应时间过长.后端和运维人员经排查,定位到MySQL数据库有死锁 根据错误 ...
- #期望,树的直径#51nod 1803 森林直径
题目 有一棵 \(n\) 个结点的树,按顺序给出树边 \((fa[i],i)\), \(Q\) 次询问查询如果只选取第 \([l,r]\) 条树边,问森林的直径 \(fa[i]\) 的生成方式为 \( ...
- #前缀和优化dp#牛客练习赛71 C 数学考试
题目 求\(1\sim n\)的排列,有\(m\)个限制条件,第\(i\)个限制条件\(p_i\), 表示前\(p_i\)个数不能是\(1\sim p_i\)的排列,求符合要求的排列的个数. 分析 这 ...
- 精彩预告 | OpenHarmony即将亮相MTSC 2023
MTSC 2023 第 12 届中国互联网测试开发大会(深圳站)即将于 2023 年 11 月 25 日,在深圳登喜路国际大酒店举办,大会将以"1 个主会场+4 个平行分会场"的形 ...