Java-在2D数组中查找连续元素

Java-在2D数组中查找连续元素,java,search,multidimensional-array,Java,Search,Multidimensional Array,我的算法有问题,假设如下: 电影院有n排,每排有m个座位(n和m不超过20个)。二维矩阵存储已售出门票的信息,数字1表示该地点的门票已售出,数字0表示该地点可用。你想买k张同一排相邻座位的票。看看能不能做到 输入数据 在输入端,程序获得n行和m个座位的数量。然后,有n行,每行包含m个数字(0或1),由空格分隔。最后一行包含一个数字k 输出数据 程序应输出具有k个连续可用座位的行数。如果有多行有k个可用座位,则输出第一行有这些座位。如果没有这样的行,则输出数字0 代码 import java.ut

我的算法有问题,假设如下: 电影院有n排,每排有m个座位(n和m不超过20个)。二维矩阵存储已售出门票的信息,数字1表示该地点的门票已售出,数字0表示该地点可用。你想买k张同一排相邻座位的票。看看能不能做到

输入数据

在输入端,程序获得n行和m个座位的数量。然后,有n行,每行包含m个数字(0或1),由空格分隔。最后一行包含一个数字k

输出数据

程序应输出具有k个连续可用座位的行数。如果有多行有k个可用座位,则输出第一行有这些座位。如果没有这样的行,则输出数字0

代码

import java.util.Scanner;

class Main {
    static int findRowWithAvailableSeat(int[][] matrix, int tickets) {
        final int rows = matrix.length;
        final int columns = matrix[0].length;
        int seatCounter = 0;

        for (int r = 1; r <= rows; r++) {
            for (int c = 1; c <= columns; c++) {
                if (matrix[r][c] == 1) {
                    continue;
                } if (matrix[r][c] == matrix[r][c + 1]) {
                    seatCounter++;
                    if (seatCounter == tickets) {
                        return r;
                    }
                }
            }
        }
        return 0;
    }


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int rows = scanner.nextInt();
        int columns = scanner.nextInt();

        int[][] matrix = new int[rows][columns];
        for (int r = 0; r < rows; r++) {
            for (int c = 0; c < columns; c++) {
                matrix[r][c] = scanner.nextInt();
            }
        }
        int kTickets = scanner.nextInt();
        int rowWithAvailableSeats = findRowWithAvailableSeat(matrix, kTickets);
        System.out.println(rowWithAvailableSeats);
    }
}
import java.util.Scanner;
班长{
静态int FindRowWithAvailableSet(int[][]矩阵,int票据){
最终int行=matrix.length;
final int columns=矩阵[0]。长度;
int seatCounter=0;
对于(int r=1;r希望这有帮助

  • 在main()方法中,您将矩阵从索引0设置为行-1,从索引0设置为列-1。但在FindRowWithAvailableSet()中,您将从索引1开始。因此,永远不会访问索引0
  • }如果(矩阵[r][c]==矩阵[r][c+1]){
    此行将尝试访问索引c+1,将导致索引越界异常。您需要检查c+1是否小于列大小,或者将矩阵[r][c]与0(矩阵[r][c]==0)进行比较
  • 如果您正在寻找相邻的座位,则在访问售出的座位时需要重置座位计数器(矩阵[r][c]==1)
  • 您还需要为每行重置seatCounter
  • 希望这有帮助

  • 在main()方法中,您将矩阵从索引0设置为行-1,从索引0设置为列-1。但在FindRowWithAvailableSet()中,您将从索引1开始。因此,永远不会访问索引0
  • }如果(矩阵[r][c]==矩阵[r][c+1]){
    此行将尝试访问索引c+1,将导致索引越界异常。您需要检查c+1是否小于列大小,或者将矩阵[r][c]与0(矩阵[r][c]==0)进行比较
  • 如果您正在寻找相邻的座位,则在访问售出的座位时需要重置座位计数器(矩阵[r][c]==1)
  • 您还需要为每行重置seatCounter

  • for循环从1开始,而不是从0开始

    for (int r = 1; r <= rows; r++) {
        for (int c = 1; c <= columns; c++) {
            if (matrix[r][c] == 1) {
    

    for循环从1开始,而不是从0开始

    for (int r = 1; r <= rows; r++) {
        for (int c = 1; c <= columns; c++) {
            if (matrix[r][c] == 1) {
    

    我会将每一行放在一个字符串中,将所有行放在一个字符串数组a[m],然后执行a[I]。每一行包含(k):
    “100110111010001011010”.contains(“000”)

    我将把每一行放在一个字符串中,把所有行放在一个字符串数组a[m],然后做[I]。每一行包含(k):
    “100110111010001011010”。包含(“000”)

    以下是您需要的4个提示:

  • 不要比较
    矩阵[r][c]==矩阵[r][c+1]
    。简单地与0比较:
    矩阵[r][c]==0
    。以避免ArrayIndexOutOfBoundsException

  • 正如DarkSigma已经指出的,从0而不是1开始循环迭代器:
    for(int r=0;r

  • 将每行的
    seatCounter
    重新初始化为0

  • 而且!当您打印出
    System.out.println(rowWithAvailableSets)
    时,请记住行计数从0开始


  • 以下是您需要的4个提示:

  • 不要比较
    矩阵[r][c]==矩阵[r][c+1]
    。简单地与0比较:
    矩阵[r][c]==0
    。以避免ArrayIndexOutOfBoundsException

  • 正如DarkSigma已经指出的,从0而不是1开始循环迭代器:
    for(int r=0;r

  • 将每行的
    seatCounter
    重新初始化为0

  • 而且!当您打印出
    System.out.println(rowWithAvailableSets)
    时,请记住行计数从0开始


  • 首先,在第一个循环后初始化seatcounter变量,使其每行以0开头,并更正逻辑以递增。首先,在第一个循环后初始化seatcounter变量,使其每行以0开头,并更正逻辑以递增。
    if (matrix[r][c] == matrix[r][c + 1])