锁定老帖子 主题:去除重复数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-25
排序好的数组, 只需要遍历一次就可以了,拿当前的值与上一个值比较,就可以去除重复的数字,比较常规的做法
arr = [1,1,1,2,2,6,6,6,34,88,88,99,101] newArr =[] newArr.append(arr[0]) for i in arr[1:]: if i != newArr[len(newArr)-1]: newArr.append(i) print newArr |
|
返回顶楼 | |
发表时间:2011-02-25
public class Distinct {
public static void main(String[] args) { int[] oNums = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 }; List newNums = new ArrayList(); int count = 0; for (int i = 0; i < oNums.length; i++) { if (oNums[i] > count) { newNums.add(oNums[i]); count = oNums[i]; } } } } 以上中如果将 int[] oNums = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 }; 改为 int[] oNums = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 }; 将会丢失第一个数字(0) |
|
返回顶楼 | |
发表时间:2011-02-25
package test;
public class Distinct { public static void main(String[] args) { int[] oNums = {-3,-3,-3,-2,-1,0,0,0,0,0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5,7,8,8,8,8,9 }; String a=String.valueOf(oNums[0])+","; for(int i=1;i<oNums.length;i++){ String b[] = a.split(","); if(oNums[i]!=Integer.parseInt(b[b.length-1])) a=a+oNums[i]+","; } System.out.println(a.replace(',', ' ')); } } |
|
返回顶楼 | |
发表时间:2011-03-07
最后修改:2011-03-07
先分组,再将分组中list.size大于1的从最后一个删除到第一个,只保留第一个,这样就没有重复的了。
QQ:784222511 |
|
返回顶楼 | |
发表时间:2011-03-12
int[] a = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 };
int[] bucket = new int[a.length]; for (int i = 0; i < a.length; i++) { bucket[a[i]] = a[i]; } |
|
返回顶楼 | |
发表时间:2011-03-18
遍历一次,n难道比nlg(n) 慢?在n的规模在数十或者更大时,不是n要比nlg(n)小么。。
|
|
返回顶楼 | |
发表时间:2011-03-18
这个也叫算法。。。
|
|
返回顶楼 | |
发表时间:2011-05-01
buptwhisper 写道 遍历一次,n难道比nlg(n) 慢?在n的规模在数十或者更大时,不是n要比nlg(n)小么。。
我也觉得,有时候,一听到算法,效率什么的,就去想啊想,却偏偏不去考虑最普通的方法。有点为了算法而算法的感觉 |
|
返回顶楼 | |
发表时间:2011-05-01
最后修改:2011-05-01
sunney2012 写道 int[] a = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 };
int[] bucket = new int[a.length]; for (int i = 0; i < a.length; i++) { bucket[a[i]] = a[i]; } 如果a[i]是负数,会出错的,同学。 我能给出的最好答案只有这样了: public static int[] removeDuplication(int[] src) { if (src == null || src.length < 2) return src; int index = 0; for (int i = 1; i < src.length; i++) if (src[i] != src[index]) //这里(src[i]^src[index])!=0会不会更快? src[++index] = src[i]; int[] result = new int[index+1]; System.arraycopy(src, 0, result, 0, index+1); return result; } |
|
返回顶楼 | |
发表时间:2011-05-01
排序好的,最快应该是二分吧
|
|
返回顶楼 | |