public int removeDuplicates(int[] nums) {
int j = 0;
int pre = -10001;
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (pre == nums[i]){
count++;
if (count <= 2){
nums[j++] = pre;
}
}
else{
pre = nums[i];
nums[j++] = pre;
count = 1;
}
}
return j;
}
public int removeElement(int[] nums, int val) {
int length = nums.length;
int i = 0;
int j = length-1;
boolean flag = false;
while(i<=j){
for (int k = i; k <= j; k++) {
if (nums[k] == val) {
i = k;
flag = true;
break;
}
}
for (int k = j; k >= i ; k--) {
if (nums[k]!=val){
j = k;
break;
}
}
if (flag){
nums[i] = nums[j];
j--;
i++;
flag = false;
}
else {
break;
}
}
return j+1;
}
public int removeDuplicates(int[] nums) {
int j = 1;
for (int i = 0; i < nums.length-1; i++) {
if (nums[i] != nums[i+1]){
nums[j++] = nums[i+1];
}
}
return j;
}
public int removeDuplicates(int[] nums) {
int j = 0;
int pre = -10001;
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (pre == nums[i]){
count++;
if (count <= 2){
nums[j++] = pre;
}
}
else{
pre = nums[i];
nums[j++] = pre;
count = 1;
}
}
return j;
}
题目咋一看是想不到双指针的,但是问题就在于此,根据直觉想出的算法是难以用程序表达或表达较为烦琐的,如果想到使用双指针,就能很轻松的解决问题。所谓双指针是指在遍历数组的过程中,一个指针负责填充构造新的数组,另一个指针负责比较操作,但这里要注意的是,双指针并不一定就是2个指针i和j,而是逻辑功能上有两个,即构造数组和比较。这类题一般都出在原地操作上。