leetcode -> 探索初级算法:数组
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
class Solution { public int removeDuplicates(int[] nums) { if(nums.length == 0) return 0; int index = 0; int compares = nums[0]; for(int i:nums) { if(i != compares) { nums[++index] = i; compares = i; } } return ++index; } }
* 一个变量index控制给数组第几位赋值
* 一个变量compares控制赋的值是多少
* 遍历的时候index从0开始,compares从数组第一个元素开始
* 由于是排序数组,所以相同数总是连续出现
下面是数组变化过程:给出一个符合题意的数组如下
[1, 1, 1, 2, 2, 3, 5, 7, 7] index=0 compares=1 第0位
[1, 1, 1, 2, 2, 3, 5, 7, 7] index=0 compares=1 第1位
[1, 1, 1, 2, 2, 3, 5, 7, 7] index=0 compares=1 第2位
[1, 1, 1, 2, 2, 3, 5, 7, 7] index=0 compares=1 第3位;处理完后数组变为 [1, 2, 1, 2, 2, 3, 5, 7, 7] index=1 compares=2
[1, 2, 1, 2, 2, 3, 5, 7, 7] index=1 compares=2 第4位;
[1, 2, 1, 2, 2, 3, 5, 7, 7] index=1 compares=2 第5位;处理完后数组变为 [1, 2, 3, 2, 2, 3, 5, 7, 7] index=3 compares=3
[1, 2, 3, 2, 2, 3, 5, 7, 7] index=3 compares=3 第6位;处理完后数组变为 [1, 2, 3, 5, 2, 3, 5, 7, 7] index=4 compares=5
[1, 2, 3, 2, 2, 3, 5, 7, 7] index=3 compares=3 第7位;处理完后数组变为 [1, 2, 3, 5, 7, 3, 5, 7, 7] index=4 compares=7
[1, 2, 3, 5, 7, 3, 5, 7, 7] index=4 compares=7 第8位;
操作完毕,此时index=4,即处理到第4位,实际符合题意长度是index+1=5