文章目录
- [2684. 矩阵中移动的最大次数](https://leetcode.cn/problems/maximum-number-of-moves-in-a-grid/)
- 思虑:
- 代码:
2684. 矩阵中移动的最大次数
思虑:
1.将第一列的所有行坐标,用IntStream 来生成一个范围 [0, m) 内的整数流,用boxed方法进行装箱,并收集到Set集合中
2.从第一列开始,逐列进行遍历。
3.每一列,将集合中的所有行坐标取出,对每一个行坐标x,找出下一列可能满足的行坐标x,并且下一步要大
4.将符合的行坐标加入集合t,如果不能移动,返回当前列数
5.否则将t赋值給q,继续下一次的遍历
6.最后如果都遍历完了,说明走到最后一列,返回n-1
代码:
public int maxMoves(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
Set<Integer> q = IntStream.range(0, m).boxed().collect(Collectors.toSet());
//使用 Java 8 中的 IntStream 来生成一个范围在
// [0, m) 内的整数流,然后通过 boxed() 方法将 IntStream 装箱为
// Stream<Integer>,最后通过collect(Collectors.toSet()) 方法
// 将整数流中的元素收集到一个 Set 集合中。
for (int j = 0; j < n - 1; j++) {
Set<Integer> t = new HashSet<>();
for (int x : q) {
for (int i = x - 1; i <= x + 1; i++) {
if (i >= 0 && i < m && grid[x][j] < grid[i][j]) {
t.add(i);
}
}
}
if (t.isEmpty()){
return j;
}
q = t;
}
return n-1;
//最后如果都遍历完了,说明走到最后一列,返回n-1
}
点击移步博客主页,欢迎光临~