关于数组的常见算法

一、案例一

|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 案例:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,总和,平均值,并输出出来 要求:所有随机数都是两位数:[10,99] 提示:求[a,b]范围内的随机数: (int)(Math.random() * (b - a + 1)) + a; |
| 代码实现 | public class ArrayExer01 { public static void main(String[] args) { //1. 动态初始化方式创建数组 int[] arr = new int[10]; //2. 通过循环给数组元素赋值 for (int i = 0; i < arr.length; i++) { arr[i] = (int)(Math.random() * (99 - 10 + 1)) + 10; System.out.print(arr[i] + "\t"); } System.out.println(); //3.1 求最大值 int max = arr[0]; for (int i = 1; i < arr.length; i++) { if(max < arr[i]){ max = arr[i]; } } System.out.println("最大值为:" + max); //3.2 求最小值 int min = arr[0]; for (int i = 1; i < arr.length; i++) { if(min > arr[i]){ min = arr[i]; } } System.out.println("最小值为:" + min); //3.3 求总和 int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } System.out.println("总和为:" + sum); //3.4 求平均值 int avgValue = sum / arr.length; System.out.println("平均值为:" + avgValue); } } |

二、案例二

|------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 案例:评委打分 分析以下需求,并用代码实现: (1)在编程竞赛中,有10位评委为参赛的选手打分,分数分别为:5,4,6,8,9,0,1,2,7,3 (2)求选手的最后得分(去掉一个最高分和一个最低分后其余8位评委打分的平均值) |
| 代码实现 | public class ArrayExer02 { public static void main(String[] args) { int[] scores = {5,4,6,8,9,0,1,2,7,3}; //声明三个特征值 int sum = 0; int max = scores[0]; int min = scores[0]; for (int i = 0; i < scores.length; i++) { sum += scores[i]; //累加总分 //用于获取最高分 if(max < scores[i]){ max = scores[i]; } //用于获取最低分 if(min > scores[i]){ min = scores[i]; } } int avg = (sum - max - min) / (scores.length - 2); System.out.println("去掉最高分和最低分之后,平均分为:" + avg); } } |

三、案例三

|-------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 找最值及其所有最值的下标 |
| 代码实现一 | public class Test13AllMaxIndex { public static void main(String[] args) { int[] arr = {4,5,6,1,9,9,3}; //找最大值 int max = arr[0]; for(int i=1; i<arr.length; i++){ if(arr[i] > max){ max = arr[i]; } } System.out.println("最大值是:" + max); System.out.print("最大值的下标有:"); //遍历数组,看哪些元素和最大值是一样的 for(int i=0; i<arr.length; i++){ if(max == arr[i]){ System.out.print(i+"\t"); } } System.out.println(); } } |
| 代码实现二 | public class Test13AllMaxIndex2 { public static void main(String[] args) { int[] arr = {4,5,6,1,9,9,3}; //找最大值 int max = arr[0]; String index = "0"; for(int i=1; i<arr.length; i++){ if(arr[i] > max){ max = arr[i]; index = i + ""; }else if(arr[i] == max){ index += "," + i; } } System.out.println("最大值是" + max); System.out.println("最大值的下标是[" + index+"]"); } } |

四、案例四

|------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 案例:使用二维数组打印一个 10 行杨辉三角。 提示: 1. 第一行有 1 个元素, 第 n 行有 n 个元素 2. 每一行的第一个元素和最后一个元素都是 1 3. 从第三行开始, 对于非第一个元素和最后一个元素的元素。即: yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j]; |
| 代码实现 | public class YangHuiTest { public static void main(String[] args) { //1. 创建二维数组 int[][] yangHui = new int[10][]; //2.使用循环结构,初始化外层数组元素 for(int i = 0;i < yangHui.length;i++){ yangHui[i] = new int[i + 1]; //3. 给数组的元素赋值 //3.1 给数组每行的首末元素赋值为1 yangHui[i][0] = yangHui[i][i] = 1; //3.2 给数组每行的非首末元素赋值 //if(i >= 2){ for(int j = 1;j < yangHui[i].length - 1;j++){ //j从每行的第2个元素开始,到倒数第2个元素结束 yangHui[i][j] = yangHui[i - 1][j] + yangHui[i - 1][j - 1]; } //} } //遍历二维数组 for (int i = 0; i < yangHui.length; i++) { for (int j = 0; j < yangHui[i].length; j++) { System.out.print(yangHui[i][j] + "\t"); } System.out.println(); } } } |

五、案例五

|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 案例:复制、赋值 使用简单数组 (1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。 (2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。 (3)显示array1的内容。 (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。 (5)打印出array1。 思考:array1和array2是什么关系? 【answer】array1和array2是两个变量,共同指向了堆空间中的同一个数组结构。即二者的地址值相同。 拓展:修改题目,实现array2对array1数组的复制 |
| 代码实现(赋值) | public class ArrayExer04 { public static void main(String[] args) { //(1)创建一个名为ArrayExer04的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。 int[] array1,array2; //(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。 array1 = new int[]{2,3,5,7,11,13,17,19}; //(3)显示array1的内容。 for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + "\t"); } //(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。 array2 = array1; System.out.println(); System.out.println(array1); System.out.println(array2); for (int i = 0; i < array2.length; i++) { if(i % 2 == 0){ array2[i] = i; } } System.out.println();//换行 //(5)打印出array1。 for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + "\t"); } } } |
| 代码实现(复制) | public class ArrayExer04_1 { public static void main(String[] args) { //(1)创建一个名为ArrayExer04的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。 int[] array1,array2; //(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。 array1 = new int[]{2,3,5,7,11,13,17,19}; //(3)显示array1的内容。 for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + "\t"); } //(4)复制array1数组给array2,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。 array2 = new int[array1.length]; for (int i = 0; i < array1.length; i++) { array2[i] = array1[i]; } System.out.println(); System.out.println(array1); System.out.println(array2); for (int i = 0; i < array2.length; i++) { if(i % 2 == 0){ array2[i] = i; } } System.out.println();//换行 //(5)打印出array1。 for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + "\t"); } } } |

六、案例六

|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 案例: 定义数组:int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67}; 如何实现数组元素的反转存储?你有几种方法。 |
| 代码实现1 | public class ArrayExer05 { public static void main(String[] args) { int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67}; //遍历 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); //反转操作 //方式1: for(int i = 0;i < arr.length/2;i++){ //交互arr[i] 与 arr[arr.length - 1 - i]位置的元素 int temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; } } } |
| 代码实现2 | public class ArrayExer05 { public static void main(String[] args) { int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67}; //遍历 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); //反转操作 //方式2: for(int i = 0,j = arr.length - 1;i < j;i++,j--){ //交互arr[i] 与 arr[j]位置的元素 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } |
| 代码实现3 | public class ArrayExer05 { public static void main(String[] args) { int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67}; //遍历 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); //反转操作 //方式3:不推荐 int[] newArr = new int[arr.length]; for(int i = arr.length - 1;i >= 0;i--){ newArr[arr.length - 1 - i] = arr[i]; } arr = newArr; //遍历 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } } } |

七、案例七

|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 一个数组,让数组的每个元素去除第一个元素,得到的商作为被除数所在位置的新值。 |
| 代码实现 | public class Test3 { public static void main(String[] args) { int[] arr = new int[]{12,43,65,3,-8,64,2}; // for(int i = 0;i < arr.length;i++){ // arr[i] = arr[i] / arr[0]; // } for(int i = arr.length -1;i >= 0;i--){ arr[i] = arr[i] / arr[0]; } //遍历arr for(int i = 0;i < arr.length;i++){ System.out.print(arr[i] + " "); } } } |

七、案例七

|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时,要求元素的值各不相同。 |
| 代码实现 | public class Test4 { // 5-67 Math.random() * 63 + 5; @Test public void test1() { int[] arr = new int[6]; for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31) arr[i] = (int) (Math.random() * 30) + 1; boolean flag = false; while (true) { for (int j = 0; j < i; j++) { if (arr[i] == arr[j]) { flag = true; break; } } if (flag) { arr[i] = (int) (Math.random() * 30) + 1; flag = false; continue; } break; } } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } //更优的方法 @Test public void test2(){ int[] arr = new int[6]; for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31) arr[i] = (int) (Math.random() * 30) + 1; for (int j = 0; j < i; j++) { if (arr[i] == arr[j]) { i--; break; } } } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } } |

八、案例八:回形数

|-------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 案例说明 | 从键盘输入一个整数(1~20) ,则以该数字为矩阵的大小,把1,2,3...n*n 的数字按照顺时针螺旋的形式填入其中。 例如: 输入数字2,则程序输出: 1 2 4 3 输入数字3,则程序输出: 1 2 3 8 9 4 7 6 5 输入数字4, 则程序输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 |
| 代码实现一 | //方式1 public class RectangleTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入一个数字"); int len = scanner.nextInt(); int[][] arr = new int[len][len]; int s = len * len; /* * k = 1:向右 * k = 2:向下 * k = 3:向左 * k = 4:向上 */ int k = 1; int i = 0,j = 0; for(int m = 1;m <= s;m++){ if(k == 1){ if(j < len && arr[i][j] == 0){ arr[i][j++] = m; }else{ k = 2; i++; j--; m--; } }else if(k == 2){ if(i < len && arr[i][j] == 0){ arr[i++][j] = m; }else{ k = 3; i--; j--; m--; } }else if(k == 3){ if(j >= 0 && arr[i][j] == 0){ arr[i][j--] = m; }else{ k = 4; i--; j++; m--; } }else if(k == 4){ if(i >= 0 && arr[i][j] == 0){ arr[i--][j] = m; }else{ k = 1; i++; j++; m--; } } } //遍历 for(int m = 0;m < arr.length;m++){ for(int n = 0;n < arr[m].length;n++){ System.out.print(arr[m][n] + "\t"); } System.out.println(); } } } |
| 代码实现二 | //方式2 /* 01 02 03 04 05 06 07 24 25 26 27 28 29 08 23 40 41 42 43 30 09 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 */ public class RectangleTest1 { public static void main(String[] args) { int n = 7; int[][] arr = new int[n][n]; int count = 0; //要显示的数据 int maxX = n-1; //x轴的最大下标 int maxY = n-1; //Y轴的最大下标 int minX = 0; //x轴的最小下标 int minY = 0; //Y轴的最小下标 while(minX<=maxX) { for(int x=minX;x<=maxX;x++) { arr[minY][x] = ++count; } minY++; for(int y=minY;y<=maxY;y++) { arr[y][maxX] = ++count; } maxX--; for(int x=maxX;x>=minX;x--) { arr[maxY][x] = ++count; } maxY--; for(int y=maxY;y>=minY;y--) { arr[y][minX] = ++count; } minX++; } for(int i=0;i<arr.length;i++) { for(int j=0;j<arr.length;j++) { String space = (arr[i][j]+"").length()==1 ? "0":""; System.out.print(space+arr[i][j]+" "); } System.out.println(); } } } |

相关推荐
吾日三省吾码27 分钟前
JVM 性能调优
java
LNTON羚通1 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
弗拉唐1 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi772 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
少说多做3432 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀2 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
哭泣的眼泪4082 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
蓝黑20203 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea
Ysjt | 深3 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++