doraemongo 2009-04-16 11:57
浏览 188
已采纳

恳请算法牛人指点一个关于数组的算法

大家好,我现在有这么个需求,就是我有一个数组,如果里面的值全都相同,我就得到这个数值,以及数组元素全部索引,如果数组中的值并不相同,我就得到所有不同的值,以及不同的值对应的所有数组元素的索引,举个例子

比如有个int数组,姑且叫int a,如下
[code="java"]int[] a = new int[10][/code]
如果a中的数值都相同,假设都为1,那么我就得到1,同时得到的索引值为0、1、2、3、4、5、6、7、8、9

如果a中的值不相同,比如a的值为{1,1,1,1,1,2,2,3,3,4},我的到值分别为1、2、3、4。同时,我获得不同的值对应的所有数组元素索引,这个例子中,数值1对应索引0、1、2、3、4,数值2对应索引5、6,数值3对应索引7、8,数值4对应索引9

如果数组的值为{1,1,5,1,2,2,3,5,3,1},我得到的值为1,5,2,3,数值1对应索引0、1、3、9,数值5对应2、7、数值2对应索引4、5,数值3对应对应索引6、8

要求算法的执行效率要尽可能快,说白了就是运算越快越好。(别告诉我就是两个循环比较--b)

[color=red]附注:如果能用正则表达式获得相同的效果也可以,麻烦您给个完整例子嘿嘿[/color]

小弟就剩7分了,所以只能送5分,想豁出去全送了竟然不行,恳请算法好的朋友写个代码,拜谢,回头去雍和宫给您烧株高香!!!!!

  • 写回答

6条回答 默认 最新

  • iteye_19016 2009-04-16 13:19
    关注

    [code="java"]

    public static void main(String[] args) {

            //核心代码
            int[] a = new int[]{1,1,2,1,1,2,2,3,3,4};
            Map<Integer,String> map = new HashMap<Integer,String>();
            int i = 0;
            for(Integer key : a){
    
                if(!map.containsKey(key)){
                    map.put(key, ""+i);
                }else{
                    map.put(key, map.get(key)+","+i);
                }
                i++;
            }
    
            // 输出结果测试
            Iterator ite = map.keySet().iterator();
            while(ite.hasNext()){
                Integer value = (Integer)ite.next();
                String Indexs =  map.get(value);
                System.out.println(" 值: "+value+" 索引 :"+Indexs);
            }
    
        }
    

    [/code]

    还有那2分都给我

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?