云小杰

相对于绝对成功的汲汲渴求,越无杂质的奔赴,越是动人。

要一个黄昏, 满是风, 和正在落下的夕阳。如此, 足够我爱这破碎泥泞的人间。


Download the theme

球会落何处

1706. 球会落何处

题目描述

用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。

箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角,可以将球导向左侧或者右侧。

  • 将球导向右侧的挡板跨过左上角和右下角,在网格中用 1 表示。
  • 将球导向左侧的挡板跨过右上角和左下角,在网格中用 -1 表示。

在箱子每一列的顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。如果球恰好卡在两块挡板之间的 “V” 形图案,或者被一块挡导向到箱子的任意一侧边上,就会卡住。

返回一个大小为 n 的数组 answer ,其中 answer[i] 是球放在顶部的第 i 列后从底部掉出来的那一列对应的下标,如果球卡在盒子里,则返回 -1

示例1:

img

输入grid = [[1,1,1,-1,-1],[1,1,1,-1,-1],[-1,-1,-1,1,1],[1,1,1,1,-1],[-1,-1,-1,-1,-1]]
输出[1,-1,-1,-1,-1]
解释示例如图
b0 球开始放在第 0 列上最终从箱子底部第 1 列掉出
b1 球开始放在第 1 列上会卡在第 23 列和第 1 行之间的 "V" 形里
b2 球开始放在第 2 列上会卡在第 23 列和第 0 行之间的 "V" 形里
b3 球开始放在第 3 列上会卡在第 23 列和第 0 行之间的 "V" 形里
b4 球开始放在第 4 列上会卡在第 23 列和第 1 行之间的 "V" 形里

示例2:

输入grid = [[-1]]
输出[-1]
解释球被卡在箱子左侧边上

示例 3:

输入grid = [[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1],[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1]]
输出[0,1,2,3,4,-1]

方法:模拟

我们依次判断每个球的最终位置。对于每个球,从上至下判断球位置的移动方向。在对应的位置,如果挡板向右偏,则球会往右移动;如果挡板往左偏,则球会往左移动。若移动过程中碰到侧边或者 $\text{V}$ 型,则球会停止移动,卡在箱子里。如果可以完成本层的移动,则继续判断下一层的移动方向,直到落出箱子或者卡住。

    /**
     * 1706. 球会落何处
     *
     * @param grid
     * @return
     */
    public int[] findBall(int[][] grid) {
        int length = grid[0].length;
        int[] ans = new int[length];
        for (int i = 0; i < length; i++) {
            int col = i;
            for (int[] row: grid) {
                int dir = row[col];
                col += dir;  // 移动球
                if (col < 0 || col >= length || dir!=row[col]) {
                    col = -1;
                    break;
                }
            }
            ans[i] = col;
        }
        return ans;
    }
最近的文章

二叉树的最大深度

104. 二叉树的最大深度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。方法一:层次遍历可以使用层次遍历的方法,定义一个队列 deque,每一次将二叉树整行的节点存入队列,这样就可以根据循环的次数判断出二叉树的高度。/** * Definitio...…

继续阅读
更早的文章

搜索旋转排序数组

搜索旋转排序数组题目描述整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给...…

继续阅读