LeetCode26 Remove Duplicates from Sorted Array**

题目:

Given a sorted array, remove the duplicates in place such that each element appear onlyonceand 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].

链接:https://leetcode.com/problems/remove-duplicates-from-sorted-array/

分析:这道题很简单,就是移除有序数组中重复的元素,这里我给出三种方法。

法一:暴力

for(int i = 0; i < n; i++){int j = 1;while((i+j)<n && A[i] == A[i+j]){j++;}if(j > 1){for(int k = i+j; k < n; k++)A[k-j+1] = A[k];n = n-j+1;}}return n结果是TLE,很明显。

法二:设了一个vector,简单多了,但是需要额外的空间,不知道怎么在leetcode上也通过了

if(n == 0) return 0;vector <int>v;v.push_back(A[0]);for(int i = 1; i < n; i++){if(A[i] != v.back()) v.push_back(A[i]);}for(int i = 0; i < v.size(); i++)A[i] = v[i];return v.size();法三:设置一个计算器,用来统计不重复元素个数,当元素不同时,每当遍历前后元素不相同,,计数器加1,并将计数器对应在数组中位置定位到当前遍历的元素。it is amazing!!!class Solution {public:int removeDuplicates(int A[], int n) {// 法一:/* for(int i = 0; i < n; i++){int j = 1;while((i+j)<n && A[i] == A[i+j]){j++;}if(j > 1){for(int k = i+j; k < n; k++)A[k-j+1] = A[k];n = n-j+1;}}return n;*/// 法二 这样也能 AC ?/*if(n == 0) return 0;vector <int>v;v.push_back(A[0]);for(int i = 1; i < n; i++){if(A[i] != v.back()) v.push_back(A[i]);}for(int i = 0; i < v.size(); i++)A[i] = v[i];return v.size();*/// 法三 It is amazing!!if(n == 0) return 0;int index = 1;for(int i = 1;i < n; i++){if(A[i] != A[i-1]){A[index++] = A[i];}}return index;}};

多看书,看好书。

LeetCode26 Remove Duplicates from Sorted Array**

相关文章:

你感兴趣的文章:

标签云: