长春建站模板,生产管理软件app,中铁建设集团有限公司总承包公司,天津wordpress开发26. 删除有序数组中的重复项 - 力扣#xff08;LeetCode#xff09;
题目#xff1a;
给你一个 非严格递增排列 的数组 nums #xff0c;请你 原地 删除重复出现的元素#xff0c;使每个元素 只出现一次 #xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 …26. 删除有序数组中的重复项 - 力扣LeetCode
题目
给你一个 非严格递增排列 的数组 nums 请你 原地 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k 你需要做以下事情确保你的题解可以被通过
更改数组 nums 使 nums 的前 k 个元素包含唯一元素并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。
解题思路
1. 原地删除 双引用思想指针 fir、sec
2. 步骤解析
1firsec指向数组首元素 (2) sec向后移动如果碰见与fir指向元素不相同的位置此时fir进行移动。
这一步骤可以理解为数组中的[0,fir]区间内存放的是不重复的元素而sec就是负责去找不重复的元素的。一旦找到fir就得在区间内为这个元素开辟空间即fir;
无论是否碰见重复元素sec引用指针是一直往后移动的
fir指向的元素就是删除后有效的最后一个元素最后的有效元素个数就是fir指向的索引1。 代码实现
public int RemoveArrayElements(int[] nums){int fir0,sec0;//sec移动到元素的末尾此时fir就指向最后一个不重复的元素//nums[0,fir]区间均为不重复元素while(secnums.length){if(nums[fir]!nums[sec]){fir1;nums[fir]nums[sec];}sec;}return fir1;}
思考如果删除所有重复元素如何进行改进