其他分享
首页 > 其他分享> > leetcode26.删除有序数组中的重复项

leetcode26.删除有序数组中的重复项

作者:互联网

leetcode26.删除有序数组中的重复项

/**
     * 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,
     * 返回删除后数组的新长度。
     * <p>
     * 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
     */
  1. 题目要求原地删除重复的元素,使每个元素只出现一次,因此不能创建新数组,可以考虑将不重复的元素继续存储到这个数组中
  2. 因为数组在底层是连续存储的,及地址是连续的,这样的结构使得在原数组中存储新数据成为可能
  3. 只是在存储新数据后原数组的元素发生改变,
  4. 要保证新数组元素的唯一,立刻想到的就是Hash结构,能够保证元素的不可重复性
public int removeDuplicates(int[] nums) {

        //创建HashSet集合,由于Hash的元素不重复性,可以保证拿到的元素唯一
        HashSet<Integer> set = new HashSet<>();
        //记录不重复的元素数目
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            //遍历数组,将不重复的元素继续存储到这个数组中,
            int num = nums[i];
            //如果添加成功则返回true
            if (set.add(num)) {
                nums[count] = num;
                count++;
            }
        }
        return count;
    }

标签:count,删除,nums,int,元素,重复,数组,leetcode26
来源: https://www.cnblogs.com/mx-info/p/14725289.html