这个程序是一个解决问题的程序,它的功能是读入一个矩阵,然后找出其中相邻两行之间的颜色相同的数量,且颜色相同的行之间距离小于等于 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 可以高效地存储和访问颜色信息,提高了程序效率。
  • 代码结构清晰易懂,逻辑简单明了。
  • 程序可读性好,易于理解和维护。

该程序的局限性在于:

  • 程序只针对颜色相同的情况进行判断,无法处理其他情况。
  • 程序的性能可能受到矩阵大小和颜色数量的影响。

总体来说,该程序是一个比较简洁高效的代码示例,可以作为学习数据结构和算法的参考。

Java 程序代码分析:统计矩阵中相邻两行颜色相同且距离小于等于 m 的数量

原文地址: https://www.cveoy.top/t/topic/lTWy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录