[leetcode]Remove Element

来源:互联网 发布:java二叉树查找key算法 编辑:程序博客网 时间:2024/06/18 17:24

Remove Element

题意:将一个list中某数删除,其他元素的顺序可以改变

解法:

         O(n):从左到右遍历list,遇到elem,直接不管。遇到非elem,把它放到前面对应的位置。

         O(n*logn):将数组排序,找到元素出现的地方,其他地方平移。

下面这代码又臭又长,我不能忍了,为何写出如此垃圾的代码。

public class Solution126 {   public int removeElement(int[] A, int elem) {             if (A.length==0){                       return 0;             }       qsort(A,0,A.length-1);        if(A[0]==elem&&A[A.length-1]==elem){                return 0;       }       if (elem<A[0]||elem>A[A.length-1]){                return A.length;       }       if (A[A.length-1]==elem){                int pos=-1;                for (inti=A.length-1;i>=0;i--){                          if (A[i]!=elem){                                   pos=i;                                   break;                          }                }                return pos+1;       }       if (A[0]==elem){                int pos=-1;                for (inti=1;i<=A.length-1;i++){                          if (A[i]!=elem){                                   pos=i;                                    break;                          }                }                for (inti=pos;i<A.length;i++){                          A[i-pos]=A[i];                }                return A.length-pos;       }       int pos=-1;       for (int i=1;i<A.length;i++){                if (A[i]==elem){                          pos=i;                           break;                }       }       int pos2=-1;       for (int i=A.length-2;i>=0;i--){                if (A[i]==elem){                          pos2=i;                          break;                }       }       for (int i=pos2+1;i<A.length;i++){                A[i-(pos2-pos+1)]=A[i];       }             return A.length-(pos2-pos+1);    }          privatevoid qsort(int[] a, int x, int y) {                   inti=x;                   intj=y;                   intt=a[(i+j)/2];                   do{                            while(a[i]<t){                                     i++;                            }                            while(a[j]>t){                                     j--;                            }                            if(i<=j){                                     inttemp=a[i];                                     a[i]=a[j];                                     a[j]=temp;                                     i++;                                     j--;                            }                   }while(i<=j);                   if(y>i){                            qsort(a,i,y);                   }                   if(x<j){                            qsort(a,x,j);                   }         }}


0 0