删除数组中的相同值

删除有序数组中的重复项
给你一个有序数组 原地删除重复出现的元素 让每个元素只能出现一次 返回删除后数组的新长度 不能用额外的数组空间 必须要在原地修改输入数组并在使用O(1)额外空间的条件下完成
package LeeCodeTest26;

题解就是使用双指针 一个快指针和一个慢指针 快指针移动的找到不同的数字 然后将找到的数字复制给慢指针所指向的索引 也就是重新在原来的基础上将老数组重新刷新了以便

/**
 * 给你一个有序数组nums 请你原地删除重复出现的元素
 * 使每个元素只出现一个 返回删除后数组的新长度。
 * 不要使用额外的数组空间 你必须要在原地修改输入数组并在使用O(1)额外空间的条件下完成
 *
 * 删除一个有序数组删除掉数组中间重复的元素 他这个是删除数组过会 返回的是一个修改输入数组的新长度
 * 并且还会返回一个修改过会的修改数组就是已经经过去重过后的
 */

/**
 * 解题思路
 * 从第一个开始进行寻找 依次和数组里面的进行比对将相同的数字进行一个记录 并且删除
 * 或者我们可以将这个数组中的数据存到hashmap中应为hashmap 是不允许重复的数字的
 * 使用双指针法 来操作一下数组
 */

public class LeeCodeTest26 {

    public int removeDuplicates(int[] nums){
        //删除有序数组中的重复项
        //使用双指针法
        if(nums.length==0)
            return 0;
        //定义一个慢指针 一个快指针
        int slowIndex=1;
        int fastIndex=1;
        while(fastIndex<nums.length){
            if(nums[fastIndex]!=nums[fastIndex-1]){
                nums[slowIndex]=nums[fastIndex];
                ++slowIndex;
            }
            ++fastIndex;
        }
        //这里为什么要加1就是我们的慢指针是从0开始的 而我们的的长度是我们数组的索引+1所形成的
        return slowIndex;
    }

    public static void main(String[] args) {
        LeeCodeTest26 test= new LeeCodeTest26();
        int[] array={1,1,2};
        int i = test.removeDuplicates(array);
        System.out.println(i);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值