http://oj.leetcode.com/problems/remove-element/
!特征向量的思想,尽管有点大材小用,但是我的确是从djstla中获得的灵感。
1 class Solution { 2 public: 3 int removeElement(int A[], int n, int elem) { 4 int *b = new int[n+1]; 5 b[0] = 0; 6 for(int i = 0;i < n;++i){ 7 if(A[i] == elem){ 8 b[i+1] = b[i]+1; 9 } 10 else { 11 b[i+1] = b[i]; 12 } 13 } 14 15 for(int i =0 ;i< n;++i){ 16 A[i - b[i]] = A[i]; 17 } 18 int res = n - b[n]; 19 delete []b; 20 return res; 21 } 22 };
!ac后重新审视自己的代码,总能发现更好的方式。而福尔摩斯不需要纸和笔,所有的这一切只要想就可以得到结果。记得《血色研究》中写道,同时代的侦探不乏,然后举了一个侦探SCM调查案件的过程,最后添了一句话:“而这一切福尔摩斯只是在抽一抖烟中解决了”。这就是我和大牛的区别。
1 class Solution { 2 public: 3 int removeElement(int A[], int n, int elem) { 4 int tmp = 0; 5 for(int i = 0;i < n;++i){ 6 if(A[i] == elem){ 7 A[i-tmp] = A[i]; 8 tmp++; 9 } 10 else{ 11 A[i-tmp] = A[i]; 12 } 13 } 14 return n - tmp; 15 } 16 };