概述
题目要求:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
}
输入输出示例:
[0,0,1,1,2,2,3,3]-------------->4,[0,1,2,3]
[]--------------------------------->0,[]
[0,0,0,0,0,0]------------------ >1,[0]
解题思路:
用两个下标分别i指向第一个和j指向第二个数,如果两者相同,则j自+1,指向三个,再比较数组下标为i和j的值大小,计数一次,count+1;如果两者不同,i自+1,将下标为j的值赋给+1后的i,j自+1。直到j为数据最后一个数据。则数组中前(nums.size()-count)的数据是数据。
具体实现:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int count=0; //计数使用
for(int i=0,j=1;j<nums.size();j++){
if(nums[i]==nums[j]){
count++; //出现重复元素个数
}else{
nums[++i]=nums[j];//将不重复的元素值,依次从数组的第一个元素开始存放
}
}
return nums.size()-count;
//数组总长度减去出现重复元素个数,差就是删除数组中重复项后剩下的不重复的元素个数
}
};
最后
以上就是积极蜻蜓为你收集整理的C语言算法:力扣——删除排序数组中的重复项的全部内容,希望文章能够帮你解决C语言算法:力扣——删除排序数组中的重复项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复