|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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,更有助于理解 |
|