[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
- LeetCode:Remove Element
- LeetCode: Remove Element
- [Leetcode] Remove Element
- LeetCode: Remove Element
- leetcode 39: Remove Element
- [LeetCode] Remove Element
- Leetcode: Remove Element
- Leetcode:Remove Element
- Leetcode:Remove Element
- Leetcode:Remove Element
- [LeetCode]Remove Element
- LeetCode-Remove Element
- LeetCode - Remove Element
- LeetCode | Remove Element
- leetcode之Remove Element
- LeetCode - Remove Element
- LeetCode: Remove Element
- 【LeetCode】Remove Element
- 黑马程序员_线程的生命周期
- Maven下引入外部文件
- InterLockedIncrement and InterLockedDecrement
- URAL 1078. Segments(记录路径的简单dp)
- VS2008安装Qt4.8
- [leetcode]Remove Element
- Qt去掉treeview项的焦点虚线
- 乱谈C++
- 随身wifi之战响起
- 周卓华的创业故事
- Android CheckBox自定义图片没效果--解决办法
- 二维数组中的查找
- 病人刚做完支架头晕心慌气短是为什么
- Android实现推送方式解决方案