数组方面的知识以及算法题

本文介绍Java中数组的基本操作,包括声明、输出、转换为列表、检查包含值、连接数组、移除元素等实用技巧,并提供了数组算法题示例,如判断数组是否由连续数字组成及求数组交集。
数组常用的几个方法
1.  声明一个数组

    String[] aArray = new String[5];  
    String[] bArray = {"a","b","c", "d", "e"};  
    String[] cArray = new String[]{"a","b","c","d","e"}; 
2.  输出一个数组

Java代码

    int[] intArray = { 1, 2, 3, 4, 5 };  
    String intArrayString = Arrays.toString(intArray);  
       
    // print directly will print reference value  
    System.out.println(intArray);  
    // [I@7150bd4d  
       
    System.out.println(intArrayString);  
    // [1, 2, 3, 4, 5] 
3.  从一个数组创建数组列表


Java代码

    String[] stringArray = { "a", "b", "c", "d", "e" };  
    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  
    System.out.println(arrayList);  
    // [a, b, c, d, e]  
4.  检查一个数组是否包含某个值


Java代码

    String[] stringArray = { "a", "b", "c", "d", "e" };  
    boolean b = Arrays.asList(stringArray).contains("a");  
    System.out.println(b);  
    // true 
5.  连接两个数组

Java代码

    int[] intArray = { 1, 2, 3, 4, 5 };  
    int[] intArray2 = { 6, 7, 8, 9, 10 };  
    // Apache Commons Lang library  
    int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2); 

9.  将一个数组转换为集合(set)
Java代码

    Set<String> set = new HashSet<String>(Arrays.asList(stringArray));  
    System.out.println(set);  
    //[d, e, b, c, a] 

11.  移除数组中的元素

Java代码

    int[] intArray = { 1, 2, 3, 4, 5 };  
    int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array  
    System.out.println(Arrays.toString(removed)); 
	
12.数组方面的算法题
给定一个int数组,写一个函数判断该数组中的所有数字是否能组成连续数字。如[1,3,4,6,2,5]能组成连续数字,
【1,2,5,4,7】不能。数组中的数也可能重复
代码:
public boolean  isContinousArray(int[] intArr)  
    {  
        if(intArr==null) return false;  
        if(intArr.length<2) return true;  
        int maxInt=intArr[0],minInt=intArr[0];  
        for(int i:intArr)  
        {  
            System.out.println(i);  
            if(i>maxInt) maxInt=i;  
            if(i<minInt) minInt=i;  
        }  
        for(int value=minInt;value<=maxInt;value++)  
        {  
            boolean found=false;  
            for(int j:intArr)  
            {  
                if(j==value)  
                {  
                    found=true;  
                    break;  
                }  
            }  
            if(!found) return false;  
        }  
        return true/found;  
    }
还有一种算法
	创建一个数组String str = new String("0123456789");
	将数字转换为字符串型,判断该字符串是否是str的子串,是则是连续数字,否则不是。
	
13.求数组的交集
有两个长度分别为m,n的非降序整型数组,其中n>m*m,求这两个数组的交集,要求复杂度尽可能低。

如数组a:-1,4,5

数组b:-15,1,3,4,5,7,8,9,10,15

结果应该是:4,5

代码
public void m1()
{
	Set aSet=new HashSet() ;
	Set bSet=new HashSet() ;
	for(int i=0 ;i<n;i++)
	{
		aSet.add(A[i]) ;
	}    
	for(int i=0 ;i<m;i++)
	{
		bSet.add(B[i]) ;
	}    
	aSet.retainAll(bSet) ;
	for(Integer i:aSet)
	{
		System.out.println(i) ;
	}
    
}

### 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]。 #### 常见练习题推荐 为了进一步巩固所学的知识,可以从以下几个方面入手进行实践训练: - 查找数组中的最大值或最小值。 - 对数组进行升序或者降序排列。 - 实现两个数组之间的交集、并集运算。 - 判断某个特定数值是否存在于给定数组之中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值