LeetCode26java实现删除排序数组中的重复项
程序员文章站
2022-04-15 14:18:12
...
题目描述:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。
解题思路:
类似于双指针法。
数组完成排序后,我们可以放置两个指针preIndex和i,preIndex指向的是删除后最近安放元素的最后位置,i负责扫描未检查元素,
若i指向的值和preIndex指向的值相同,则继续扫描,preIndex指向不变;
若i指向的值和preIndex指向的值不同,则i当前指向的值保存到preIndex的下一个位置且preIndex+1;
如此继续扫描直到结束,返回的preIndex + 1的值即为数组新的长度。
java代码如下:
class Solution {
public int removeDuplicates(int[] nums) {
int count;
int preIndex = 0;
int curValue;
for (int i = 1; i < nums.length; i++) {
curValue = nums[i];
if(curValue != nums[preIndex]){
nums[preIndex + 1] = curValue;
preIndex = preIndex + 1;
continue;
}
continue;
}
return preIndex + 1;
}
}
运行结果如下:
上一篇: Hive数据去重、多变一与一变多等实现
下一篇: MySql的入侵测试以及防范_MySQL