程序查找给定者数组

时间:2016-02-22 14:07:33

标签: java arrays

这不是一个指向任何错误的问题,而是要求改进用java编写的程序。 这是一个非常简单的程序,用于查找给定整数数组中特定整数的出现次数。

然而,这个程序工作正常,但我想知道是否可以对此程序进行任何改进以节省时间或内存。

以下是该计划:

import java.util.HashMap;
import java.util.Map;

public class Logix {

public static void main(String args[]) {
    int arr[] = { 10, 9, 8, 7, 3, 10, 8, 1, 8, 3, 1, 1 };
    int cnt = 0, count = 1;
    Map<Integer, Integer> map = new HashMap<Integer, Integer>(12);
    int currntN = arr[cnt];

    outer:while (cnt != arr.length) {
        if(!map.isEmpty()){
            if(map.containsKey(arr[cnt])){
                cnt++;
                continue outer;
            }
            currntN = arr[cnt];
            count=1;
        }
        for (int i = cnt + 1; i < arr.length; i++) {
            if (currntN == arr[i]) {
                count++;
            }
        }
        cnt++;
        map.put(currntN, count);
    }

    System.out.println(map);
}
}

这是一个非常基础的初级程序。 我希望知道可以做一些改进。 谢谢

2 个答案:

答案 0 :(得分:-1)

我看到你在解决方案中使用了两个循环。可以优化此问题的解决方案,仅使用单个循环。

以下是包含基本注释的代码段。我希望它能帮助你理解这个概念:

public static void main (String[] args)
{
    int[] arr = {10,9,8,7,10,9,8,7,10,9};
    calculateFrequency(arr);
}

public static void calculateFrequency(final int[] numberList) {
    /* Calculate Frequency */
    Map<Integer,Integer> cnts = new HashMap<>();
    for (int i = 0; i < numberList.length; i++) {
        /* Update Counts */
        cnts.put(numberList[i],cnts.containsKey(numberList[i]) ? cnts.get(numberList[i]) + 1 : 1);
    }

    /* Print Values */
    System.out.println(cnts);
}

如果您想迭代地图,那么您可以按如下方式进行:

for (Map.Entry<Integer, Integer> entry : cnts.entrySet()) {
    System.out.println("Number = " + entry.getKey() + ", Frequency = " + entry.getValue());
}

输出:

Number = 7, Frequency = 2
Number = 8, Frequency = 2
Number = 9, Frequency = 3
Number = 10, Frequency = 3

答案 1 :(得分:-4)

Arrays.sort(arr);
 for(int i=0;i<arr.length;)
                {
                    count=1;
                    for(index=i+1;index<arr.length;index++)
                    {
                        if(arr[i]==arr[index])
                        {
                            count++;
                        }
                        else{

                            break;
                        }


                    }
                    System.out.println("   "+arr[i]+ "   "+count);
                    i+=count;

Hope my code provide answer to your problem.Happy coding.