Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array A = [1,1,2]
,
Your function should return length = 2
, and A is now [1,2]
.
【解析】
每次和已经记录的最后一个数组元素比较,如果重复就跳过,否则将其加入数组末尾。
【代码】
/********************************* * 日期:2014-01-14 * 作者:SJF0115 * 题目: 26.Remove Duplicates from Sorted Array * 来源:http://oj.leetcode.com/problems/remove-duplicates-from-sorted-array/ * 结果:AC * 来源:LeetCode * 总结: **********************************/ #include <iostream> #include <stdio.h> using namespace std; // 时间复杂度 O(n),空间复杂度 O(1) class Solution { public: //A数组的重要特点是已经排序 int removeDuplicates(int A[], int n) { if(n == 0){ return 0; } //新数组下标 int index = 0; for(int i = 1;i < n;i++){ if(A[i] != A[index]){ A[++index] = A[i]; } } return index+1; } }; int main() { int result; Solution solution; int A[] = {1,1,2,2,2,2,4,4,5,6,8}; result = solution.removeDuplicates(A,11); printf("Length:%d\n",result); for(int i = 0;i < result;i++){ printf("%d ",A[i]); } return 0; }