力扣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 ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的 ...
随机推荐
- Git: Host key verification failed(主机密钥验证失败)
换了新电脑Y7000 10750H,之前的项目提示这个,本以为删个什么文件,搜了一阵,没找到答案. 简单粗暴的方法就是再git clone一下,就ok了,这点很不爽.暂时先这么解决了.
- python基础五(文件操作)
一 文件操作 一 介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...
- FTP的安装和使用
实验环境: windows server虚拟机一台 网络适配器:vmnet1 ip:192.168.1.220 一.安装FTP服务 打开服务器管理器 点击添加角色,勾IIS,点击下一步直到对话框消失 ...
- Cesium之双屏联动实现
1. 概述 双屏联动是常见的一种地图开发需求,主要用于同时查看两个地图,进行对比查看,还有一种类似的需求叫"卷帘门"(map split) 双屏联动效果如下: 卷帘门的效果如下: ...
- 记录--静态网站 H5 跳小程序,以及踩坑
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 我司有智慧功成家APP和对应的小程序,现在已经实现APP分享到微信,微信点击分享链接直接进入小程序. 目前有一个问题就是我们APP在 ...
- 记录--记录用前端代替后端生成zip的过程,速度快了 57 倍!!!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 业务场景: 产品有个功能是设置主题.类似手机自动切换壁纸,以及其他功能颜色,icon,字体等. 管理员需要在后端管理系统多次下载不同主题, ...
- 记录--两行CSS让页面提升了近7倍渲染性能!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 对于前端人员来讲,最令人头疼的应该就是页面性能了,当用户在访问一个页面时,总是希望它能够快速呈现在眼前并且是可交互状态.如果页面加载 ...
- 快速上手系列:JavaScript
第一章 基础语法 1 javascript 的简介 * 是基于对象和事件驱动的语言,应用于客户端. - 基于对象: ** 提供好了很多对象,可以直接拿过来使用 - 事件驱动: ** html 做网站静 ...
- go语言漏桶算法思路简单实现
package main import ( "fmt" "time" ) // 桶 type LeakBucket struct { capacity int ...
- 【已解决】mybatis注解@Param失效,无法获取到值(org.apache.ibatis.binding.BindingException: Parameter 'policy' not found. Available parameters are [arg1, arg0, param1, param2])
案发现场: 传递的参数是一个实体类 PolicyDictionary 此时我无法拿到数据: 解决思路一(不推荐) 删去@Param注解,使用mybatis默认的参数顺序: 不使用@param注解传递多 ...