【百日算法计划】:每日一题,见证成长(006)
题目
删除有序数组中的重复项
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解题思路
- 用区间范围表示不重复元素集合,比如[0,k],k表示该范围的右边界
- 当i在扫描的过程中,遇到和k位置元素不相等的值时,k先右移一位,然后再把i的值放进该区间k的位置
- 最后返回k+1长度
public static int removeDuplicates(int[] nums) {if (nums.length == 0) return 0;int k = 0; //[0,k]表示不重复元素的区间范围,k表示该范围的右边界for (int i = 1; i < nums.length; i++) {if (nums[i] != nums[k]){k++; //边界先右移一位nums[k] = nums[i]; //把不重复的元素加进区间中}}return k + 1;}