这不是一个指向任何错误的问题,而是要求改进用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);
}
}
这是一个非常基础的初级程序。 我希望知道可以做一些改进。 谢谢
答案 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.