Remove Duplicates from Sorted Array
移除数组中相同的元素。这题和上题是类似的。
我的思路:
1 有了上题的经验,两个指针移动,相等的时候不做任何动作,循环会让后面的指针一直移动到和前面的指针不相等的时候,再把值赋给前面的指针后一个。注意:一定要判断是空数组的情况,也就是n小于1的时候。
if (n < 1) return n; int start = 0; for (int i = 1; i != n; i++) if (A[start] != A[i]) A[++start] = A[i]; return ++start;
Remove Duplicates from Sorted Array II
我的思路:
1、最多可以有两个相同的。
2、我的思路是设置一个标识来表示出现过没有,如果题目改成了其他条件,我们只需要在判断中修改成相应的数字即可。
3、但是代码还是不够简介,思路不够优化。
我的代码:
int removeDuplicates(int A[], int n) { if (n <= 2) return n; int cur = 0; int duplicate = false; for (int i = 1; i < n; i++) { if (A[cur] != A[i]) { A[++cur] = A[i]; duplicate = false; } else if (!duplicate){ A[++cur] = A[i]; duplicate = true; } } return ++cur; }
别人思路:
1、需要的就是这样的代码,来自leetcode讨论区。
2、这里没有设置什么标志,直接利用下标的差值就可以完成判断。
int removeDuplicates(int A[], int n) { if (n <= 2) return n; // no need to deal with n<=2 case. int len = 2, itor = 2; while (itor < n) { if (A[itor] != A[len-2]) A[len++] = A[itor]; itor++; } return len; }
反思:思路还是不够开