热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

文章目录🐨1. 题目🏹2. 思路🪃3. 代码实现🐨1. 题目 给你一个升序排列的数组nums,请你原地删除重复出现的元素

在这里插入图片描述

文章目录

    • 🐨1. 题目
    • 🏹2. 思路
    • 🪃3. 代码实现


🐨1. 题目


给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那nums的前k个元素应该保存最终结果。
将最终结果插入 nums 的前k个位置后返回k
不要使用额外的空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例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 <&#61; nums.length <&#61; 3 * 104
  • -104 <&#61; nums[i] <&#61; 104
  • nums 已按 升序 排列

&#x1f3f9;2. 思路

这里题目对空间复杂度做了要求&#xff0c;必须为 O(1) &#xff0c;那么我们就不能开辟新的数组&#xff0c;只能在原数组上动手。题目还给出了一个条件——数组是有序的&#xff0c;这就意味着如果重复的元素一定是相邻的。
这样我们就可以考虑用双指针&#xff0c;因为要比较指向的内容是否相同&#xff0c;所以这里不能指向同一个位置&#xff0c;即我们设置一个前dst&#xff0c;一个后src
在这里插入图片描述

&#x1fa83;3. 代码实现


注意&#xff1a;
这个函数的返回值是去重后的数组长度。在函数执行的过程中&#xff0c;变量dst表示当前去重后的数组的最后一个元素的索引&#xff0c;因此实际上需要返回的是dst &#43; 1。

int removeDuplicates(int* nums, int numsSize){int src &#61; 1;int dst &#61; 0;while(src<numsSize){if(nums[dst] !&#61; nums[src]){nums[&#43;&#43;dst] &#61; nums[src&#43;&#43;];}else{src&#43;&#43;;}}return dst&#43;1;
}


推荐阅读
author-avatar
手机用户2502941011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有