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;
}

本文介绍了一种高效的方法来去除已排序数组中的重复项,仅使用常数级额外空间,通过一次遍历实现元素的唯一性,并返回处理后的数组长度。
1069

被折叠的 条评论
为什么被折叠?



