马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 肖-肖 于 2021-5-5 17:45 编辑
代码如下:/** 删除排序数组中的重复项
*一个有序数组 nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。
*注意点: 数组是有序的、是原地删除不能通过增加额外的空间来实现这个功能、
*不能使用额外的数组空间,必须再原地修改输入数组并在使用O(1)额外空间的条件下完成。
*例: 输入:[0,1,2,2,3,3,4]
* 输出:5
* 重点考察:双指针算法
*/
public class SortedArrayDuplicates {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(removeDuplicates(new int[]{0,1,2,2,3,3,4}));
}
//去除重复元素的方法 - 参数传入数组
public static int removeDuplicates(int[] nums){
//先对传进来的数组的长度进行校验
if(nums.length == 0){
return 0;
}
//下面写双指针-分别为i(慢指针因为它从0开始)、j(快指针因为它从1开始)
int i = 0;
for(int j = 1;j<nums.length;j++){
//如果不相等的话就赋值
if(nums[j] != nums[i]){
i++;//nums[j] != nums[i]-》i指针往后走 其实判断完这个ifj也会++的,j始终最少要比i快1 也就是如果这两个值不相等的话i和j一起往后移
nums[i] = nums[j];//把不相等的这个元素(快指针指向的元素)赋值给慢指针加1后指向的元素 这幸亏是有序的如果不是有序的那肯定不行啊
}
//如果这两个不相等就不会进入if内部
//如果相等的话也没必要i++因为相等不算是不一样的元素个数 就不管 i++快指针走就行
}
return i+1;//i就是不重复数组的最后一个下标、长度的话需要加1
}
}
运行结果提示:
可以在代码的第27行打断点进行debug,更有助于理解 |