论坛首页 综合技术论坛

去除重复数

浏览 11121 次
锁定老帖子 主题:去除重复数
精华帖 (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
0 请登录后投票
   发表时间: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)
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(',', ' '));
    }  
}
0 请登录后投票
   发表时间:2011-03-07   最后修改:2011-03-07
先分组,再将分组中list.size大于1的从最后一个删除到第一个,只保留第一个,这样就没有重复的了。
QQ:784222511
0 请登录后投票
   发表时间: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];
}
0 请登录后投票
   发表时间:2011-03-18  
遍历一次,n难道比nlg(n) 慢?在n的规模在数十或者更大时,不是n要比nlg(n)小么。。
0 请登录后投票
   发表时间:2011-03-18  
这个也叫算法。。。
0 请登录后投票
   发表时间:2011-05-01  
buptwhisper 写道
遍历一次,n难道比nlg(n) 慢?在n的规模在数十或者更大时,不是n要比nlg(n)小么。。

我也觉得,有时候,一听到算法,效率什么的,就去想啊想,却偏偏不去考虑最普通的方法。有点为了算法而算法的感觉
0 请登录后投票
   发表时间: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;
}
0 请登录后投票
   发表时间:2011-05-01  
排序好的,最快应该是二分吧
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics