当前位置: 首页 > news >正文

Day7--HOT100--54. 螺旋矩阵,48. 旋转图像,240. 搜索二维矩阵 II

Day7–HOT100–54. 螺旋矩阵,48. 旋转图像,240. 搜索二维矩阵 II

每日刷题系列。今天的题目是力扣HOT100题单。

题目类型:矩阵。(方法:模拟,标记,翻转,排除法)

54. 螺旋矩阵

方法:模拟

思路【我】:

做过几遍,背下来了……

每次要保持循环不变量,就是每次遍历的区间都是左闭右闭。

先遍历上边和右边,然后判断有没有越界,再遍历下边和左边。不然会重复遍历。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res = new ArrayList<>();int n = matrix.length;int m = matrix[0].length;int left = 0;int right = m - 1;int top = 0;int bottom = n - 1;while (left <= right && top <= bottom) {for (int i = left; i <= right; i++) {res.add(matrix[top][i]);}top++;for (int i = top; i <= bottom; i++) {res.add(matrix[i][right]);}right--;// 左闭右闭的话,这里要再判一次if (left <= right && top <= bottom) {for (int i = right; i >= left; i--) {res.add(matrix[bottom][i]);}bottom--;for (int i = bottom; i >= top; i--) {res.add(matrix[i][left]);}left++;}}return res;}
}

思路【@灵艾山茶府】:

1,自定义方向标dirs

2,加入res后标记走过的地方

3,预测下一步能不能走,不能走的话,右转90度

class Solution {private static final int[][] dirs = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; // 右下左上public List<Integer> spiralOrder(int[][] matrix) {int n = matrix.length;int m = matrix[0].length;List<Integer> res = new ArrayList<>();int i = 0;int j = 0;int di = 0;for (int k = 0; k < n * m; k++) {// 1,加入res后标记res.add(matrix[i][j]);matrix[i][j] = Integer.MAX_VALUE;// 2,预测下一步看看能不能走int x = i + dirs[di][0];int y = j + dirs[di][1];// 2.1,不能走。如果 (x, y) 出界或者已经访问过if (x < 0 || x >= n || y < 0 || y >= m || matrix[x][y] == Integer.MAX_VALUE) {// 右转 90°di = (di + 1) % 4;}// 2.2,能走。(这里不能等于(x,y)!)i += dirs[di][0];j += dirs[di][1];}return res;}
}

48. 旋转图像

思路【@灵艾山茶府】:

用翻转操作代替旋转操作。

旋转90度:(i,j)→(j,n−1−i)

两次翻转:(i,j)转置(j,i)行翻转(j,n−1−i)

1,转置。(遍历对角线下方元素)

2,行翻转。

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;int m = matrix[0].length;// 1,转置。(遍历对角线下方元素)for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}// 2,行翻转。for (int i = 0; i < n; i++) {for (int j = 0; j < m / 2; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[i][n - 1 - j];matrix[i][n - 1 - j] = temp;}}return;}
}

240. 搜索二维矩阵 II

思路【@灵艾山茶府】:

利用 matrix 行列有序的性质,我们可以用 O(1) 的时间获取 O(m) 或 O(n) 的信息。相比之下,O(mn) 的暴力查找(一个一个地找),每次花费 O(1) 的时间,只获取了 O(1) 的信息。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n = matrix.length;int m = matrix[0].length;// 从右上角开始查找int i = 0;int j = m - 1;while (i < n && j >= 0) {// 找到了,返回if (matrix[i][j] == target) {return true;}// 如果右上角的元素比target小,那么它这一行的元素都排除(因为它是这一行里面最大的)if (matrix[i][j] < target) {i++;} else {// 如果右上角的元素比target大,那么它这一列的元素都排除(因为它是这一列里面最小的)j--;}}return false;}
}
http://www.dtcms.com/a/352703.html

相关文章:

  • LeetCode 32. 最长有效括号
  • 安卓接入通义千问AI的实现记录
  • 基于Springboot学生社区管理系统源码
  • uniapp H5禁止微信浏览器长按出菜单,只针对图片
  • 迅睿CMS自定义网站表单:HTML方式调用Select下拉选项数据指南
  • HTML(面试)
  • 【开题答辩全过程】以 微信小程序的医院挂号预约系统为例,包含答辩的问题和答案
  • 【开题答辩全过程】以 微信小程序的老年活动中心为例,包含答辩的问题和答案
  • 本地windows电脑部署html网页到互联网:html+node.js+ngrok/natapp
  • 腾讯位置商业授权微信小程序路线规划
  • 基于微信小程序的化妆品成分查询系统源码
  • Android Glide最佳实践:高效图片加载完全指南
  • 软考-系统架构设计师 业务处理系统(TPS)详细讲解
  • Class44语言模型
  • 实现多态的三个必要条件?
  • 计算机网络:服务器处理多客户端(并发服务器)
  • ollama离线部署+大语言模型
  • 【JAVA实现websocket】
  • 【网络】网络基础概念
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2025.04.10-2025.04.15
  • 数据结构:堆排序 (Heap Sort)
  • 基于单片机光照强度检测(光敏电阻)系统Proteus仿真(含全部资料)
  • 华为鸿蒙HarmonyOS Next基础开发教程
  • uniapp+vue+uCharts开发常见问题汇总
  • uniapp npm安装形式 全局分享和按钮分享设置
  • Spring Boot:统一返回格式,这样搞就对了。
  • HMM简单拓展-HSMM与高阶HMM
  • 视频号存在争议了...
  • 软件开发技术栈
  • JVM之【运行时数据区】