我在算法上遇到麻烦,假设以下情况:电影院有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);
}
}
我知道问题出在findRowWithAvailableSeat方法中。我想提示如何解决问题,而不是实际解决方案。非常感谢。
希望这会有所帮助
} if (matrix[r][c] == matrix[r][c + 1]) {
此行将尝试访问索引c + 1,将导致索引超出范围异常。您需要检查c + 1是否小于列大小,或者将matrix [r] [c]与0(matrix [r] [c] == 0)进行比较。我将每一行都放在一个字符串中,所有行都放在一个字符串数组a [m]中,然后在每一行上执行a [i] .contains(k):“ 1001101110100010110010”。包含(“ 000”)
您的for循环从1而不是0开始
for (int r = 1; r <= rows; r++) {
for (int c = 1; c <= columns; c++) {
if (matrix[r][c] == 1) {
矩阵数组的第一个索引被跳过。因此,您不必检查第一行和每一行的第一座。
此外,没有为每行重置seatCounter
。当前,它保留了前几行计算出的所有席位。