[leetcode]Remove Element

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值