这是一类典型的题,思路是,一开始可以再开一个辅助数组,这样会更直观一些。如果新数组改变不会影响原数组,则可以合并起来,如本题。
package Level2;
import java.util.Arrays;
/**
* Remove Duplicates from Sorted Array II
*
* Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3],
Your function should return length = 5, and A is now [1,1,2,2,3].
*/
public class S80 {
public static void main(String[] args) {
// int[] A = {1,1,1,1,2,2,2,3};
int[] A = {1,2,2};
int k = removeDuplicates(A);
for(int i=0; i<k; i++){
System.out.print(A[i] + " ");
}
}
// 很经典的一道题!
// 思路是,一开始可以再开一个辅助数组,这样会更直观一些。
// 如果新数组改变不会影响原数组,则可以合并起来,如本题
public static int removeDuplicates(int[] A) {
// i用来遍历数组,j保存新数组的最后位置
int i = 1, j = 0;
int cnt = 0;
if(A.length < 3){
return A.length;
}
for(; i<A.length; i++){
if(A[i] == A[j]){ // 重复的情况
if(cnt == 0){ // 当且仅当重复一次(共出现两次)的情况下才复制
A[++j] = A[i];
}
cnt++;
}else{ // 不重复的情况,更新j的位置,然后直接复制过去
A[++j] = A[i];
cnt = 0; // 重置counter
}
}
return j+1;
}
}