题目:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2,
并且原数组 nums 的前两个元素被修改为[1,2]
你不需要考虑数组中超出新长度后面的元素
思路:
题目意思就是把重复的数删除,然后只输出剩余的数,其实就是用后面的数占据前面重复的这个数的位置。
因为这道题的前提是已经排好顺序的数组,所以最后只输出数组中从下标0到最后那个交换位置的下标就可以了。大致的方法就是用两个数记录数组下标的变化,例如用 i 和 j,令i=0,j=1;用一个循环记录j从1开始与下标 i 表示的数相比看是否相等,不相等的话说明符合条件,i++,用 i 记录所求结果数组的元素个数,所以令数组[i]=数组[j],继续循环,j++,相等的话同样继续循环,最后返回 i+1,就表示删除重复项之后数组的元素的个数。(其实就算是没有排序的数组,无非就是在删除之前多加排序的过程而已,自己也可以下去试试!)自己也是个小菜鸡,哪里写得不好,希望博友们见谅 ! >_<
代码如下:
class Solution {
public:
int result(vector<int>& nums) { //定义一个不指定长度的动态数组
if(nums.empty()) //empty()函数用来检测nums数组是否为空
return 0;
int i=0;
int n=nums.size(); //调用size()函数,记录数组元素个数
for(int j=1;j<n;j++){
if(nums[j]!=nums[i]){
i++;
nums[i]=nums[j];
}
else
continue;
}
return i+1;
}
};