数组算法题

博客介绍了求数组中出现次数最多元素个数的方法。思路是用HashMap存储,key为元素,value是存储相同元素的LinkedList,最后遍历找出对应LinkedList中size最大的。

1.求一个数组中的出现次数最多的元素的个数

思路:使用HashMap存储,key是每个元素,value是一个LinkedList,这个链表存储了key对应所有的元素(即相同的元素),最后遍历找出LinkedList对应size最大的;

public class GetMostFrequentInArrayList {
    public static <T> int getMostFrequentByMap(T a[]){
        if (a == null || a.length==0){
            return 0;
        }
        int result = 0;

        int length = a.length;
        HashMap<T,LinkedList<T>> hashMap = new HashMap<>();
        for (int i=0;i<length;i++){
            if (hashMap.get(a[i])!=null){
                hashMap.get(a[i]).add(a[i]);
            }else {
                LinkedList<T> linkedList = new LinkedList<>();
                linkedList.add(a[i]);
                hashMap.put(a[i],linkedList);
            }
        }

        //遍历找出出现次数最大的元素
        LinkedList<T> list = null;
        for (LinkedList<T> temp : hashMap.values()){
            if (list == null){
                list = temp;
                continue;
            }
            if (temp.size() > list.size()){
                list = temp;
            }
        }

        result = list.size();
        return result;

    }

    public static void main(String[] args){
        Integer[] a = {1,23,42,1,3,123,4,122,33,22,11,23,1,1,};
        System.out.print(getMostFrequentByMap(a));
    }
}

 

### Java数组算法题入门教程 Java中的数组是一种基本的据结构,用于存储相同类型的多个据项。以下是关于Java数组的基础知识以及一些简单的算法题解析。 #### 什么是数组数组是一个可以存储固定量元素的容器对象。所有的数组元素都必须具有相同的类型。可以通过索引来访问数组中的单个元素[^1]。 #### 创建和初始化数组 创建并初始化一个简单的一维数组: ```java int[] numbers = {1, 2, 3, 4, 5}; ``` 对于动态分配大小的情况,可以先声明再赋值: ```java int[] numbers; numbers = new int[5]; for (int i = 0; i < numbers.length; i++) { numbers[i] = i * 2; } ``` #### 处理多维数组 多维数组数组数组。下面的例子展示了如何定义和操作二维数组: ```java // 定义一个二维数组 int[][] scores = new int[3][4]; // 初始化二维数组 for(int row=0;row<scores.length;row++){ for(int col=0;col<scores[row].length;col++){ scores[row][col]=row*col; } } // 打印二维数组的内容 for(int row=0;row<scores.length;row++){ for(int col=0;col<scores[row].length;col++){ System.out.print(scores[row][col]+" "); } System.out.println(); } ``` #### 统计成绩案例分析 根据需求描述,使用二维数组来保存班级各组的成绩,并完成相应的统计工作: 1. **输入部分** 使用`Scanner`类获取用户的输入。 2. **处理逻辑** - 计算每组的最大最小分及其平均分; - 进一步计算全班的整体最大最小分、平均分及总人。 代码实现如下所示: ```java import java.util.Scanner; public class ClassScoresStatistics { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); // 输入小组 System.out.println("输入班级中小组的量:"); int groupCount=scanner.nextInt(); // 动态构建二维数组以储存成绩 double[][] scores=new double[groupCount][]; int totalStudentCount=0; for(int g=0;g<groupCount;g++){ System.out.printf("输入第%d组的学生人:",(g+1)); int studentCountInGroup=scanner.nextInt(); scores[g]=new double[studentCountInGroup]; for(int s=0;s<studentCountInGroup;s++){ System.out.printf("输入第%d组学生%2d的成绩:",(g+1),(s+1)); scores[g][s]=scanner.nextDouble(); } totalStudentCount+=studentCountInGroup; } // 成绩统计 double maxScore=-Double.MAX_VALUE,minScore=Double.MAX_VALUE,totalSum=0; double[] avgPerGroup=new double[groupCount]; for(int g=0;g<groupCount;g++){ double sumForThisGroup=0,maxForThisGroup=-Double.MAX_VALUE,minForThisGroup=Double.MAX_VALUE; for(double score:scores[g]){ if(score>maxForThisGroup) maxForThisGroup=score; if(score<minForThisGroup) minForThisGroup=score; sumForThisGroup += score; if(score>maxScore) maxScore=score; if(score<minScore) minScore=score; } avgPerGroup[g]=sumForThisGroup/scores[g].length; totalSum += sumForThisGroup; } double overallAvg=totalSum/totalStudentCount; // 输出结果 System.out.println("\n=== 成绩统计 ==="); for(int g=0;g<groupCount;g++) System.out.printf("第%d组: 平均分=%.2f\n",(g+1),avgPerGroup[g]); System.out.printf("全班最高分:%.2f 最低分:%.2f 总体平均分:%.2f 总人:%d\n",maxScore,minScore,overallAvg,totalStudentCount); scanner.close(); } } ``` 上述代码实现了基于用户输入的学生成绩管理功能,并完成了必要的统计据输出[^3]。 #### 常见练习题推荐 为了进一步巩固所学的知识,可以从以下几个方面入手进行实践训练: - 查找数组中的最大值或最小值。 - 对数组进行升序或者降序排列。 - 实现两个数组之间的交集、并集运算。 - 判断某个特定值是否存在于给定数组之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值