leetcode 1260. Shift 2D Grid(2D矩阵平移)

记忆化搜索 —— Leetcode 2684. 矩阵中移动的最大次数 力扣每日一题题解。 阅读详情

在这里插入图片描述
把2D矩阵平移k步,每移一步各元素都向右平移一位,
边界元素这样处理:
右边界的移到下一行的开头,
右下角的元素移到左上角。

思路:
首先,移了m*n步会回到初始状态,相当于没有平移,
比如example1的矩阵,平移9次,又回到了原来,
所以实际需要平移的次数为k % (m * n)。

我们可以根据(i, j)计算它平移之后的位置,
idx = i * n + j + k, (按行数第几个)
row = idx / n,
col = idx % n
(row, col)是平移之后的矩阵元素位置,它可能不是从(0, 0)开始的,但是保存的时候是要从(0, 0)开始保存的。

这相当于知道了平移之后的位置(row, col),要倒推它对应的平移之前的元素(i, j), 所以只需要把idx - k即可
这里的idx = row * n + col,
-k是向左平移,把它统一成向右平移的计算,于是
idx = row *n + col + (m * n - k),
用这个idx找到平移前的元素grid[ i ][ j ],保存进结果的list即可。

因为是二维矩阵下标找元素,所以比较慢。

//9ms
    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        int m = grid.length;
        int n = grid[0].length;
        List<List<Integer>> res = new ArrayList<>();
        int nums = m * n;
        
        k = k % nums;
        
        for(int i = 0; i < m; i++) {
            List<Integer> list = new ArrayList<>();
            for(int j = 0; j < n; j++) {
                int idx = (i * n + j + nums - k) % nums;
                list.add(grid[idx / n][idx % n]);
            }
            res.add(list);
        }
        
        return res;        
    }

找到一个方法,是一维下标检索,只要2ms,很快,
它是根据k直接找到位于(0, 0)的初始位置,从这个位置往下走。
不过没有上面那种方法好理解。

    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        int rowCount = grid.length;                         // Number of rows in grid.
        int colCount = grid[0].length;                      // Number of columns in grid.
        int gridCount = rowCount * colCount;                // Number of cells (i.e. values) in grid.
        k = k % gridCount;                                  // Limit k to max number of cells in grid.  Avoid negatives in next lines.
        int kCol = (gridCount - k) % colCount;              // Column to start copying from.
        int kRow = ((gridCount - k) % gridCount) / colCount;// Row to start copying from.
        int[] innRow = grid[kRow];                          // Array for the row to start copying from.
        int[][] result = new int[rowCount][colCount];       // Create result matrix, to hold shifted values.
        for (int r = 0; r < rowCount; r++) {                // Loop through "to" rows.
            int[] outRow = result[r];                       // Get row array to copy into, so only faster 1D reference in inner loop.
            for (int c = 0; c < colCount; c++) {            // Loop through "to" columns.
                outRow[c] = innRow[kCol];                   // Copy value from grid to result, shifting by copying.
                if (++kCol >= colCount) {                   // Next "from" column.  If at end of row...
                    kCol = 0;                               // Then start "from" columns at first column.
                    if (++kRow >= rowCount)                 // When starting new column, next "from" row.  If at end of grid...
                        kRow = 0;                           // Then start "from" rows at first row.
                    innRow = grid[kRow];                    // Get row array to copy from, so only faster 1D reference when copying.
                }
            }
        }
        return (List)Arrays.asList(result);
    }
LeetCode --- 1260. Shift 2D Grid 解题报告 题意很简单,其实就是将n * m的矩阵根据要求做个是变幻。 阅读详情

相关推荐

Grid2D 编程] 使用Python实现二维网格

然后,我们使用set_cell方法设置了一些单元格的值,并使用get_cell方法获取了这些单元格的值。接着,我们使用get_size方法获取了网格的大小,并使用print_grid方法打印了整个网格。在编程中,二维网格是一种常见的数据结构,它由行和列组成,可以用于表示各种问题,如游戏地图、图像处理和算法模拟。你可以根据具体的需求扩展该类,并添加更多功能,如网格的复制、填充特定值、遍历单元格等。在初始化Grid2D对象时,我们传入行数(rows)和列数(cols),并使用嵌套的列表推导式初始化网格。

git_web425的博客 492

CodeForces.1806A .平面移动.[简单][判断可达范围][找步数规律]

判断,求解最小步数

qq_42968782的博客 649

矩阵变换(2D 平移 旋转 缩放).rar

2D坐标系中的矩阵变换,坐标位置根据某一点做旋转,平移,得到新的坐标位置。附件中的实例下载运行后可以直接看到效果

矩阵运算——平移,旋转,缩放

虹软笔试的时候又遇到了一个图像旋转的问题。特此记下面是3类基本的2D图形变换。 1.平移设某点向x方向移动 dx, y方向移动 dy ,[x,y]为变换前坐标, [X,Y]为变换后坐标。 则 X=x+dx;Y=y+dy; X = x+dx; Y = y+dy;以矩阵表示[X,Y,1]=[x,y,1]⎡⎣⎢10dx01dy001⎤⎦⎥[X,Y,1]=[x,y,1] \begin{bmatrix}

风先生的日常专栏 2万+

Gridshift1.1

vc6.0 + QT + OpenCV环境。 Grimshift算法演示代码。该论文已被录用,allrights reserved by birdwcp

电磁阀的符号解读

先数方框数量定“几位”(工作位置数 );数接口数量(P、A、R等 )定“几通”;看箭头、截断符号,结合常态位(弹簧侧/中间位 ),分析通电/断电时的通路切换;字母(P、A、R )、线圈(单/双电控 )、弹簧(复位 )辅助确认功能(如NO/NC对应常态通断 )。不同厂家符号细节(如编码、线圈画法 )有差异,遇到陌生符号,建议结合产品手册、品牌规范核对,就能精准读懂电磁阀的“语言”啦~

创新改变世界! 6883

【深度好文】2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)

本文主要用于回顾二维平面上点的转换矩阵相关概念和应用。 1. 平移 (Translation) 在2D空间中,我们经常需要将一个点平移到另一个位置。假设空间中的一点P,其用坐标表示为(x,y);将其向 x方向平移 tx,向y方向平移ty, 假设平移后点的坐标为(x’,y’),则上述点的平移操作可以归纳为如下公式: 使用齐次矩阵表示如下: 将上述过程用代码实现如下: import matplotlib import matplotlib.pyplot as plt import numpy as np

sgzqc的专栏 4697

示波器实测RGMII信号:从125MHz时钟判断千兆模式,到时序抓取与PHY寄存器避坑

本文详细介绍了使用示波器实测RGMII信号的完整流程,包括125MHz时钟频率判断、时序参数测量及PHY寄存器配置避坑指南。通过实战操作和典型故障案例分析,帮助硬件工程师快速定位和解决千兆以太网接口的调试问题,提升通信稳定性。

weixin_30015371的博客 260

图解LeetCode——1260. 二维网格迁移(难度:简单)

那么对比转换前后的两个一维数组,我们可以非常清晰的看到其中的规律,也就是,如果一共要移动6次的话(即k=6),那么一维数组中每个元素都会向后移动6位,当然,对于越界的元素,都会再次插入到数组的头部。【输入】grid=[[3,8,1,9],[19,7,2,5],[4,6,11,10],[12,0,21,13]],k=4。【输出】[[12,0,21,13],[3,8,1,9],[19,7,2,5],[4,6,11,10]]那么,最容易想到的解题思路就是,我们根据题目的描述,针对每1次迁移(...

爪哇缪斯的博客 370

ElaticSearchUtil工具类封装

package com.xxx.util; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction; import org.elasticsearch.action.ad

会飞的狼 6295

基于STM32设计的物联网疫苗冷链物流监测系统

本设计基于物联网技术,开发了一套疫苗冷链物流环境监测系统。系统采用STM32F103C8T6作为主控芯片,集成SHT30温湿度传感器、震动传感器、GPS定位模块和4G通信模块,实现对运输环境的温度、湿度及震动状况的实时监测与控制。通过继电器驱动半导体制冷模块和加湿器,系统能够自动调节环境温湿度,保障疫苗运输的安全性。采集的环境数据通过MQTT协议上传至华为云物联网平台,配套开发的Android手机APP和Windows上位机软件基于Qt平台设计,支持远程实时查看环境数据和车辆定位,提升了疫苗冷链运输的智能化

862

2d 3d旋转和平移的矩阵分析

这里我对矩阵的转置和乘积不再过多赘述了 矩阵转置就是对矩阵的行和列进行翻转得到一个新的矩阵。 矩阵乘积 首先要满足第一个矩阵的行数 等于第二个矩阵的列数,然后可以进行乘法运算。 2d 和 3d旋转 先来介绍2d的旋转矩阵的计算方式 点(x,y)=>得到新的坐标位置 (x*Cos(a) - y*Sin(a) , x*Sin(a) + y*Cos(a)) 3d的旋转矩阵的计算方式 3d的旋转矩阵的计算方式就是绕着某一个轴进行旋转,该轴对应的行和列 均为0,相交点为1。 绕着z轴

qq_39329287的博客 2354

基于STM32的智慧农业大棚监测与控制系统设计与实现

摘要:本文设计了一种基于STM32F103C8T6单片机的智慧农业大棚监测与控制系统,集成多参数环境监测、智能控制和远程管理功能。系统可实时采集光照、CO2、温湿度和土壤湿度等参数,通过OLED显示并采用双模式控制机制:自动模式下根据阈值调节设备,手动模式下支持APP或按键控制。通过ESP8266模块接入机智云平台实现数据云存储和远程控制。测试表明系统具有高精度(温度±0.5℃、CO2±50ppm)、快速响应(<2s)和稳定运行(30天无故障)等特点,有效解决了传统大棚调控不及时等问题。创新点包括多参

3254968421的博客 484

1260. Shift 2D Grid*

1260. Shift 2D Grid* https://leetcode.com/problems/shift-2d-grid/ 题目描述 Given a 2D grid of size m x n and an integer k. You need to shift the grid k times. In one shift operation: Element at grid[i][j...

珍妮的选择的博客 414

使用Python实现深度学习模型:智能光污染监测与管理

本项目将通过以下几个步骤实现智能光污染监测:收集光污染图像数据数据预处理构建深度学习模型训练模型评估模型部署模型用于实时监测通过本文介绍的步骤,我们实现了一个使用Python和深度学习技术的智能光污染监测与管理系统。该系统能够自动识别光污染源,为相关管理部门提供科学依据,以便更好地规划和管理城市照明。同时,这一方法还可以扩展到其他环境监测领域,为环境保护贡献力量。

Echo_Wish 585

Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests)

本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。

2503_91057718的博客 2120

leetcode 1260. Shift 2D Grid 二维网格迁移-耗时100

Problem:耗时100%,不需要模拟的,直接计算出平移以后的坐标,然后赋值就行的将矩阵拉成一行也就是1d,求出索引i * n + j,平移k次,相当于循环左移这个1d的数组,也就是index = (i * n + j + k) % area;最后将这个1d的数组恢复成mxn的矩阵即可,r = index / n;

邹九的个人博客 86

无人驾驶Autoware导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对无人驾驶Autoware介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2397

2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)

有了以上平移、旋转、缩放和错切矩阵后,我们就可以通过矩阵乘法求得二维平面上点P任意变换后坐标。帮助理解反向计算转换矩阵,该问描述的是正向的变换。

关注工业机器人应用 3235

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

线性代数:矩阵变换图形(二维平移缩放旋转)

        紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79566148        前面我们从理论上理解了图形学中图形的变换过程,具体可以理解为如果要对一个图形A进行变换,那么存在图形A所处的相同原点的仿射空间SpaceA(或者说仿射空间SpaceA中原点处存在一个图形A),这时候我们暂时忽略图形A,只考虑SpaceA经过各种...

羊羊的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode 1260. 二维网格迁移(C++)

给你一个n行m列的二维网格grid和一个整数k。你需要将grid迁移k次。 每次「迁移」操作将会引发下述活动: 位于grid[i][j]的元素将会移动到grid[i][j + 1]。 位于grid[i][m - 1]的元素将会移动到grid[i + 1][0]。 位于grid[n - 1][m - 1]的元素将会移动到grid[0][0]。 请你返回...

qq_27060423的博客 568

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

布局------grid(二维网格)布局篇

CSS Grid 网格布局 一、概述 1. 网格布局(Grid)是将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局 2. Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。 3. Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。 二、基本概念 2.1 容器和项目 采...

绝世唐门三哥的博客,多多关注,会不定期产出高质量文章和大家共享! 1814

二维 grid 布局

本文摘自:please call me HR so,first question? 啥是 grid 布局?grid 布局是针对 Web 布局的一个升级版,首先,回想一下,我们写 HTML 的时候,一个一个 div 像搭积木一样,完成我们最后的网页。当然,我们还需要使用 CSS 来配置我们每个 DOM 元素的具体位置,比如 navbar,s...

weixin_34318956的博客 453

2D平移与旋转

transform:scale(x,y)沿着x轴和y轴缩放 只有一个值时,沿着水平和垂直方向等比例缩放。例:transform:translate3d(1,1,1,45deg);transform:translate3d(x,y,z,度数);平移属性:transform:translate(x,y);ease(默认值)慢速开始---速度变快---慢速结束。

m0_74801389的博客 408

2d平移、缩放、旋转、倾斜、多属性值

属性:transform-origin:center;transform:scale(1.5);transform:translate(100px,100px);transform:skew();

YY的博客 1739

LeetCode - 1260 - 二维网格迁移(shift-2d-grid)

一 目录「不折腾的前端,和咸鱼有什么区别」目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路六 进一步思考二 前言「难度」:简单「涉及知识」:数组「题目地...

weixin_41806099的博客 344
上一篇: leetcode 682. Baseball Game(篮球游戏)
下一篇: cpp 指针常量 & 常量指针 & 函数后const
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值