日期:2014-05-20  浏览次数:20703 次

一个合并字冠的问题,估计没有描述清楚……,进贴看详细描述
是这样的,给一组数据 比如
13712345670
13712345671
13712345672
13712345673
13712345674
13712345675
13712345676
13712345677
13712345678
13712345679
13712345670
就可以合并为一个字冠1371234567
如果数据中还有
1371234560
1371234561
1371234562
1371234563
1371234564
1371234565
1371234566
1371234568
1371234569
就还可以合并成
137123456
最后剩下的就是一些不能在合并的字冠组;
比如中国所有理论上的手机号码做输入数据的话,最后的结果就是 13 和15


这样,每天都有很多很多很多条数据,比如200w条在sql server里

我的方法是做一颗树,然后每个节点有10个叶子就剪掉他的叶子,让这个节点做叶子。
但是这样要把整个数据都读到内存。

各位大大有没有什么更好的办法。

er……,说那么多,不知道描述清楚了没








------解决方案--------------------
得不偿失
------解决方案--------------------
探讨
得不偿失

------解决方案--------------------
闲着没事,给你写了个简单代码,如下:

Java code

package com.lihan;

public class testNum {
    public Long sum(Long[] i){
        Long max=i[0];
        for(int k=0;k<i.length;k++)
        {
            if(i[k]>max)
            {
                max=i[k];
            }
        }
        return max;
    }

    /**
     * @param args
     * @author  李晗
     */
    public static void main(String[] args) {
        String[] num={"13712345671","13712345672","13712345673","13712345674","13712345675","13712345676","13712345677","13712345678"};
        Long[] j=new Long[num.length];
        for(int i=0;i<num.length;i++)
        {
            j[i]=Long.parseLong(num[i]);
        }
        testNum t=new testNum();
        Long sum=t.sum(j);
        String str=String.valueOf(sum);
        String s=num[0];
        for(int x=0;x<s.length();x++)
        {
            if(str.charAt(x)==s.charAt(x))
            {
                System.out.print(str.charAt(x));
            }
        }
        // TODO Auto-generated method stub

    }

}