2022-08-26:用一个大小为 m x n 的二维网格 grid 表示一个箱子
你有 n 颗球。箱子的顶部和底部都是开着的。
箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角,
可以将球导向左侧或者右侧。
将球导向右侧的挡板跨过左上角和右下角,在网格中用 1 表示。
将球导向左侧的挡板跨过右上角和左下角,在网格中用 -1 表示。
在箱子每一列的顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。
如果球恰好卡在两块挡板之间的 “V” 形图案,或者被一块挡导向到箱子的任意一侧边上,就会卡住。
返回一个大小为 n 的数组 answer ,
其中 answer[i] 是球放在顶部的第 i 列后从底部掉出来的那一列对应的下标,
如果球卡在盒子里,则返回 -1。
输入: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]。

答案2022-08-26:

这道题需要画图,才能找到解决方法。

代码用rust编写。代码如下:

fn main() {
let mut grid: Vec<Vec<i32>> = vec![
vec![1, 1, 1, -1, -1],
vec![1, 1, 1, -1, -1],
vec![-1, -1, -1, 1, 1],
vec![1, 1, 1, 1, -1],
vec![-1, -1, -1, -1, -1],
];
let ans = find_ball(&mut grid);
println!("ans = {:?}", ans);
} fn find_ball(grid: &mut Vec<Vec<i32>>) -> Vec<i32> {
let n = grid.len() as i32;
let m = grid[0].len() as i32;
let mut ans: Vec<i32> = vec![];
for _ in 0..m {
ans.push(0);
}
for col in 0..m {
// (0,0) (0,1) (0,2)
let mut i = 0;
let mut j = col;
while i < n {
// (i,j) 左上 -> 右下的格子 grid[i][j] == 1
// (i+1, j+1)
// (i,j) 右上 -> 左下的格子 grid[i][j] == -1
// (i+1, j-1)
let jnext = j + grid[i as usize][j as usize];
if jnext < 0
|| jnext == m
|| grid[i as usize][j as usize] != grid[i as usize][jnext as usize]
{
ans[col as usize] = -1;
break;
}
i += 1;
j = jnext;
}
if i == n {
ans[col as usize] = j;
}
}
return ans;
}

执行结果如下:


左神java代码

2022-08-26:用一个大小为 m x n 的二维网格 grid 表示一个箱子 你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角, 可以将球导的更多相关文章

  1. 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    //在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10 ...

  2. 在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行

    package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) ...

  3. 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」

    假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 ...

  4. 一个大小为N的数组,里面是N个整数,怎样去除重复的数

    题目:一个大小为N的数组,里面是N个整数,怎样去除重复的数字: 要求时间复杂度为O(n),空间复杂度为O(1). 需要除掉重复的整数的数组,注意这里我没有处理负数情况,其实负数情况只要先用0快排分一下 ...

  5. C用malloc 向系统申请一个大小为n*4个字节的内存块

    #include <stdio.h> #include <malloc.h> void out(int *p, int n){ int i; for(i=0;i<n;i+ ...

  6. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  7. 使用一个for循环将N*N的二维数组的所有值置1

    <?php // 使用一个for循环将N*N的二维数组的所有值置1 $n = ; $a = []; ;$i<$n*$n;$i++){ $a[$i/$n][$i%$n] = ; } prin ...

  8. python 一个函数让你决定你的二维码

    今天浏览网页时无意中看到了一个特别有趣的二维码,感觉挺有意思的,回来后自己查了一下,发现挺简单的,就分享一下,挺有意思的.该函数的主要流程就是MyQR库中的myqr.run()函数,将连接转化为二维码 ...

  9. 一个有用的排序函数,array_multisort(),下面的一个用法是根据二维数组里的一个字段值的大小,对该二维数组进行重新排序

    从二维数组$cashes中取出一列 'store_id'(二维数组中的每个一维数组都有的字段),按照这个的大小排序,对二维数组$caches里面的一维数组进行重新排序 实际应用如下 想让相同部门的排在 ...

  10. 16.按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    //分类 package com.bao; public class Shuchu { int[]yi=new int[50]; String[][]er=new String[10][10]; vo ...

随机推荐

  1. win10安装node-red遇到的问题及解决方法

    1.安装失败 原因:没有管理员权限,需要用powershell(管理员)来安装 2.安装完成后运行失败 出现下面的情况 PS C:\WINDOWS\system32> node-rednode- ...

  2. LaTeX in 24 Hours - 2. Fonts Selection

    文章目录 本章内容:字体 2.1 Text-Mode Fonts 2.2 Math-Mode Fonts 2.3 Emphasized Fonts 2.4 Colored Fonts 其他章节目录: ...

  3. Nginx如何升级Openssl

    1. 什么是Openssl? 在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份.这个包广泛被应用在互联网的网页服务器 ...

  4. 密码破解-hashcat的简单使用

    在我们抓取到系统的hash值之后,需要通过一些工具来破解密码 hashcat是一款可以基于显卡暴力破解密码的工具,几乎支持了所有常见的加密,并且支持各种姿势的密码搭配 在kali Linux中自带的有 ...

  5. Yolov5——训练目标检测模型

    项目的克隆 打开yolov5官网(GitHub - ultralytics/yolov5 at v5.0),下载yolov5的项目: 环境的安装(免额外安装CUDA和cudnn) 打开anaconda ...

  6. java异常--自定义异常

    java异常--自定义异常 步骤: 创建自定义异常类. 在方法中通过throw关键字抛出异常对象. 处理异常try-catch 捕获并处理,否则在方法声明处通过throws关键字指明抛出给调用者的方法 ...

  7. Gateway 网关

    Spring Cloud Gateway 作为 Spring Cloud框架的第二代网关,在功能上要比 Zuul更加的强大,性能也更好.随着 Spring Cloud的版本迭代,Spring Clou ...

  8. 桌面应用自动化winappdriver

    桌面应用自动化winappdriver 关于winappdriver 介绍 WinAppDriver全称是Windows Application Driver,它提供了一些API,使得用户可以像sel ...

  9. 在Android应用中通过Chaquopy使用Python

    在Android应用中通过Chaquopy使用Python [译] 通过Python脚本和包为Android应用带来更多的功能 翻译自https://proandroiddev.com/chaquop ...

  10. Vim基本使用方法来啦

    一.Vim是什么 Vim是一个高度可配置的文本编辑器,用于创建和更改任何类型的文本非常高效.与大多数UNIX系统和Apple OS X一起,它被包含为"vi".Vim是稳定的,并且 ...