解:将i作为循环不变量,即i的定义在循环中一直保持是不重合元素的右边界。然后j用于循环与i比较,当发现j与i不同i就可以后移然后改变i的值,但是i右边界的定义还是没有变。
对于这类问题分为以下几个步骤:
(1)确定i的定义。
(2)确定初始状态。
(3)确定指针运动状态。
Java:
class Solution {
public int removeDuplicates(int[] nums) {
int i = 0;//i作为循环不变量,一直是满足条件的数组的右边界;
for (int j = 1; j < nums.length; j++) {//用j遍历找不同;
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
}
Cpp:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0) return 0;
int i = 0;//i作为循环不变量,一直是满足条件的数组的右边界;
for (int j = 1; j < nums.size(); j++) {//用j遍历找不同;
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
};