难度:简单
题目
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
第一次提交
362 / 362 个通过测试用例
状态:通过
执行用时: 1 ms
内存消耗: 39.9 MB
public int removeDuplicates(int[] nums) {
int flag = 1;
int i = 0;;
for(i = 1; i < nums.length; i++){
if(nums[i]!=nums[i-1]){
nums[flag++] = nums[i];
}
if(nums[i]==nums[nums.length-1]) break;
}
return flag;
}
}
思路
双指针(flag,i),flag 和 i 从1开始,flag 当做要被填的位置,遍历数组,比较 nums[i] 和 nums[i-1],如果不相同就把 nums[i] 赋值给 nums[flag] ,然后 flag 向后移动一个,如果相同则将 i 往后移动一位继续比较。
其中包含了相同元素的赋值操作,不过两个指针指在同一个位置时的赋值是不消耗资源的。
试了几个不同写法,目前这个是最优的,如果有更好的写法欢迎评论区讨论!!!
第一次写,没有经验,以后会不断学习改进!!!