Java 程序代码分析:统计矩阵中相邻两行颜色相同且距离小于等于 m 的数量
这个程序是一个解决问题的程序,它的功能是读入一个矩阵,然后找出其中相邻两行之间的颜色相同的数量,且颜色相同的行之间距离小于等于 m。具体来说,程序首先读入三个整数 n、m 和 c,其中 n 是矩阵的行数,m 是相邻两行之间的最大距离,c 是颜色总数。然后程序读入一个 n 行 51 列的矩阵 'colors',其中 'colors'[i][0] 表示第 i 行的颜色数目,'colors'[i][1...'colors'[i][0]] 表示第 i 行的颜色列表。接着程序将颜色列表转换为一个 Map 对象 'posMap',其中 key 是颜色编号,value 是一个 List 对象,表示该颜色出现在哪些行上。最后程序遍历 'posMap' 对象,找出相邻两行之间颜色相同且距离小于等于 m 的行数。最后程序输出这个数量。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int c = scanner.nextInt();
int [][]colors = new int[n][51];
for (int i = 0; i < n; i++) {
colors[i][0] = scanner.nextInt();
for (int j = 1; j <= colors[i][0]; j++) {
colors[i][j]= scanner.nextInt();
}
}
scanner.close();
Map<Integer, List<Integer>> posMap = new HashMap<>();
for (int i = 0; i < n; i++) {
for (int j = 1; j <= colors[i][0]; j++) {
int colorType = colors[i][j];
if (colorType != 0) {
if (!posMap.containsKey(colorType)) {
List<Integer> list = new ArrayList<>();
list.add(i);
posMap.put(colorType, list);
} else {
List<Integer> list = posMap.get(colorType);
list.add(i);
}
}
}
}
Set<Integer> set = posMap.keySet();
Iterator<Integer> iterator = set.iterator();
int count = 0;
while (iterator.hasNext()) {
Integer integer = iterator.next();
List<Integer> list = posMap.get(integer);
for (int i = 0; i < list.size(); i++) {
if (i < list.size() - 1) {
if (list.get(i + 1) - list.get(i) < m) {
count++;
break;
}
} else {
if (n - list.get(i) + list.get(0) < m) {
count++;
break;
}
}
}
}
System.out.println(count);
}
}
该程序主要使用以下数据结构和算法:
- HashMap: 用于存储颜色编号和其出现行号的映射关系。
- ArrayList: 用于存储同一个颜色出现在哪些行号。
- 循环遍历: 对矩阵行和颜色列表进行循环遍历,对 HashMap 进行操作。
- 判断条件: 判断相邻行之间的距离是否小于等于 m。
该程序的优势在于:
- 使用 HashMap 和 ArrayList 可以高效地存储和访问颜色信息,提高了程序效率。
- 代码结构清晰易懂,逻辑简单明了。
- 程序可读性好,易于理解和维护。
该程序的局限性在于:
- 程序只针对颜色相同的情况进行判断,无法处理其他情况。
- 程序的性能可能受到矩阵大小和颜色数量的影响。
总体来说,该程序是一个比较简洁高效的代码示例,可以作为学习数据结构和算法的参考。
原文地址: https://www.cveoy.top/t/topic/lTWy 著作权归作者所有。请勿转载和采集!