LeetCode 80. 删除有序数组中的重复项 II

 LeetCode官网题目地址:力扣

Java实现代码:

 package array;
 ​
 /**
  * @ClassName LeetCode 80.删除有序数组中的重复项 II
  * @Description https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/
  * @Author Jiangnan Cui
  * @Date 2022/10/30 17:20
  * @Version 1.0
  */
 public class LeetCode80 {
     /**
      * @MethodName removeDuplicates
      * @Description 方法2:快慢指针 for循环实现
      *              时间复杂度:O(n)
      *              空间复杂度:O(1)
      *              满足题目要求
      *              参考链接:https://www.bilibili.com/video/BV1By4y1b7q6
      * @param: nums
      * @return: int
      * @Author Jiangnan Cui
      * @Date 20:35 2022/10/30
      */
     public int removeDuplicates(int[] nums) {
         // 数组长度小于3时直接返回
         if(nums.length < 3){
             return nums.length;
         }
         // 其它情况下进行下面操作
         // 慢指针用来改变元素位置
         int left = 2;
         // 快指针用来遍历元素
         for (int right = 2; right < nums.length; right++) {
             // 判断当前遍历元素和保存有效元素的前前位置的元素是否相等
             if(nums[right] != nums[left - 2]){
                 // 不相等时进行元素替换,同时left加1右移
                 nums[left++] = nums[right];
             }
             // 相等时不做任何操作
         }
         // 最后left元素的大小即为有效数组的长度
         return left;
     }
 ​
     /**
      * @MethodName removeDuplicates2
      * @Description 方法2:快慢指针 while循环实现
      *              时间复杂度:O(n)
      *              空间复杂度:O(1)
      *              满足题目要求
      * @param: nums
      * @return: int
      * @Author Jiangnan Cui
      * @Date 20:35 2022/10/30
      */
     public int removeDuplicates2(int[] nums) {
         // 数组长度小于3时直接返回
         if(nums.length < 3){
             return nums.length;
         }
         // 其它情况下进行下面操作
         // 慢指针用来改变元素位置
         int left = 2;
         // 快指针用来遍历元素
         int right = 2;
         while(right < nums.length){
             // 判断当前遍历元素和保存有效元素的前前位置的元素是否相等
             if(nums[right] != nums[left - 2]){
                 // 不相等时进行元素替换,同时left加1右移
                 nums[left++] = nums[right];
             }
             // 相等时不做任何操作
             right++;
         }
         // 最后left元素的大小即为有效数组的长度
         return left;
     }
 ​
     public static void main(String[] args) {
         int[] nums = new int[]{1,1,1,2,2,3};
         int i = new LeetCode80().removeDuplicates(nums);
         System.out.println("i = " + i);
         int[] nums2 = new int[]{1,1,1,2,2,3};
         int i2 = new LeetCode80().removeDuplicates2(nums2);
         System.out.println("i2 = " + i2);
 ​
         int[] nums3 = new int[]{0,0,1,1,1,1,2,3,3};
         int i3 = new LeetCode80().removeDuplicates(nums3);
         System.out.println("i3 = " + i3);
         int[] nums4 = new int[]{0,0,1,1,1,1,2,3,3};
         int i4 = new LeetCode80().removeDuplicates2(nums4);
         System.out.println("i4 = " + i4);
     }
 }

输出结果:

 i = 5
 i2 = 5
 i3 = 7
 i4 = 7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值