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]
.
移除排序数组中重复数目超过三个的部分,最后最多只能重复两次。
其实这样的题目做了很多次,变种也很多,比如要求移除重复元素,即上述数组变成A=[3],还有剩余单独元素,即A=[1,2,3]。其实这些方法都是有规律的,此代码的主要思想是利用一个标识isRepeated来标志重复字串,看是否重复,根据isRepeated由true到false和由false到true的转换,来移动src的指针,从而达到删除多余重复元素的目的,同样的,假设本题的意思是想求去重复元素的话,则只需要把else中的startPosition++;这一行删除即可,就可以得到一个不含重复数字的数组(即[1,2,3,3,4,4,5]->[1,2,3,4,5])。如果想要完全删除那些元素的话,就需要略微动一下脑子了,不过都是相通的。代码看下面吧。
int removeDuplicates(int A[],int n) { if (A == NULL || n == 0) return 0; int startPosition = 0; bool isRepeated = false; for (int i = 1; i < n; i++) { if (A[i] != A[startPosition]) { isRepeated = false; startPosition++; A[startPosition] = A[i]; } else { if (isRepeated == false) { startPosition++; A[startPosition] = A[i]; isRepeated = true; } } } return startPosition + 1; } //删除重复的元素[1,2,2,3,4,4,5]->[1,3,5] int removeDuplicates(int A[],int n) { if (A == NULL || n == 0) return 0; int startPosition = 0; bool isRepeated = false; for (int i = 1; i < n; i++) { if (A[i] != A[startPosition]) { if(isRepeated==false) startPosition++; A[startPosition] = A[i]; isRepeated = false; } else { isRepeated=true; } } return startPosition + 1; }
多总结,加油开心每一天。