[LC1260]二维网格迁移
二维网格迁移
题目描述
给你一个 m 行 n 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。
每次「迁移」操作将会引发下述活动:
位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。
位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0]。
位于 grid[m - 1][n - 1] 的元素将会移动到 grid[0][0]。
请你返回 k 次迁移操作后最终得到的 二维网格。
输入输出规模
m == grid.length
n == grid[i].length
1 <= m <= 50
1 <= n <= 50
-1000 <= grid[i][j] <= 1000
0 <= k <= 100
思路
1.简单模拟
最朴素的思路为,按照题目给出的坐标变换公式,执行k次。但根据给出的输入输出规模,发现对于极端输入,操作在10^8次数量级。显然存在更合理的公式去描述进行k次变化后,各个元素的位置。
2.规律公式
- 列的变化:列变化的规律比较简单,迁移k次,就朝右移动k次,考虑到二维网格的周期性,这里需要取膜,即new_col = (ori_col + k) % num_col
- 行的变化:行的行为稍微复杂一些。我们可以发现,当列每迁移num_col次时,行就会向下移动一格。那么我们首先计算,行向下移动的绝对距离:d_row = (ori_col + k) / num_col, 然后将这个值加上原来的行号,再进行取模就得到了k次迁移后的行号:(d_row+ori_row) % num_row
代码
Golang版本
func shiftGrid(grid [][]int, k int) [][]int {
n, m := len(grid), len(grid[0]);
ans := make([][]int, n);
for i := range ans{
ans[i] = make([]int, m);
}
//fill
for i, row := range grid{
for j, item := range row{
new_col, new_row := (j+k) % m, (i+(j+k)/m)%n;
ans[new_row][new_col] = item;
}
}
return ans;
}
[LC1260]二维网格迁移的更多相关文章
- UDF——处理二维网格的利器:Boost.Geometry库
本文编译工具:VC++ UDF Studio 该插件可以直接在Visual Studio中一键编译.加载.调试UDF源码,极大提高编写排错效率,且支持C++,MFC,Windows API和第三方库, ...
- fluent meshing导入二维网格
meshing导入二维网格"> fluent meshing只能在Dimension为3D时才能使用 meshing导入二维网格"> 其实也可以导入二维网格,具体操作见 ...
- ICEM二维网格
非结构网格 结构网格 拓扑 拓扑完建立part边界条件,然后创建block 拓扑完后进行边界条件关联 全局网格设置
- leetcode-163周赛-1260-二维网格迁移
题目描述: 自己的提交: class Solution: def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int] ...
- leetcode1260二维网络迁移
题目 n*m的矩阵,一个整数k,移动矩阵k次.每次移动的操作为: 向右移动(最后一列移动到第一列) 之后,第一列向下移动. 1<=N.M<=50 0<=k<=100 题解 思考 ...
- CSS Grid基于网格的二维布局系统(详细教程)
.grid-wrap{ display: inline-flex; padding: 20px; background: #f4f4f4; word-break: initial; } .handle ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- c#中使用NetCDF存储二维数据的读写操作简单应用
[DllImport( [DllImport( [DllImport( ...
- [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀
题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...
- 基于zxing的二维码(网格)扫描
基于zxing的二维码(网格)扫描 前言:对于二维码扫描我们使用的是开源框架Zxing或者Zbar,这里使用基于zxing的二维码扫描,类似支付宝网格扫描, 二维码原理介绍: 二维码是用某种特定的几何 ...
随机推荐
- 4.5 Linux压缩文件或目录中文件为.gz格式(gzip命令)
gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为".gz". 再强调一下,gzip 命令只能用来压缩文件,不能压 ...
- 1.Kubernetes简介
Kubernetes简介 来源 bilibili尚硅谷K8S视频:https://www.bilibili.com/video/BV1GT4y1A756 中文官网:https://kubernetes ...
- 使用技巧 | 红米 Redmi Note 12 Turbo优化记录(去广告等)
原文链接:https://engapi.com/article/7569 原文也是我写的. 我的红米Redmi note8 pro 6+128已有些卡顿,遂在K70推出之际下单了Redmi Note ...
- 值得推荐的IT公司名单(广州篇)
广州,作为中国南方的重要城市,不仅历史悠久,而且在科技创新方面也具有极高的活力.特别是在IT领域,广州孕育了许多知名企业和创业公司,成为众多技术人才的聚集地. 本文将介绍一些在广州值得去的IT公司,为 ...
- P3523 POI2011 DYN-Dynamite
P3523 POI2011 DYN-Dynamite 小 trick,加双倍经验. 思路 使 \(dis\) 的最大值最小,可以想到二分 \(dis\),然后根据 \(dis\) 判断可行性. 那么可 ...
- 成为JavaGC专家Part II — 如何监控Java垃圾回收机制
本文是成为Java GC专家系列文章的第二篇.在第一篇<深入浅出Java垃圾回收机制>中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5 ...
- .NET 中的中间件(Middleware)
ASP.NET Core 中间件 什么是中间件(Middleware)? 中间件是组装到应用程序管道中以处理请求和响应的软件. 每个组件: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的 ...
- 一个 tomcat 下部署多个项目(超细另类版)
前言:网上大佬们的都是一个webapps下面部署多个项目,咱们今天来点不一样的,另一种思路则是,多个webapps,每个webapps下面运行一个项目,不知如何本地部署的可以去看看我上一篇随笔 具体步 ...
- arbitrum 资产桥合约
资产桥的作用 Rollup 的主要流程中,实际上不包含资产桥,也就是说即使没有资产桥,L2依然能正常运行但是此时L1与L2在数据上是完全独立的两条链,L1不理解L2上的数据(L1只保存L2压缩后的数据 ...
- node-koa2 微信支付,企业付款到零钱
微信支付用的V2版本 微信支付说明文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2 参数详细说明请 ...