文章目录

  • T19: 48. 旋转图像 (中等)
    • 思路
    • 解法 1: 新增数组
    • 解法 2: 原地旋转
  • T20: 54. 螺旋矩阵(中等)
    • 思路
    • 解法: 到边界换方向
  • T21: 240. 搜索二维矩阵 II (中等)
    • 思路
    • 解法:

T19: 48. 旋转图像 (中等)

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

示例 3:

输入:matrix = [[1]]
输出:[[1]]

示例 4:

输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]

提示:

matrix.length == n
matrix[i].length == n
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

新数组赋值, 这里会有浅拷贝深拷贝问题, 如果直接matrix=arr, 会指向地址而不是新增空间

解法 1: 新增数组

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;int[][] matrix_new = new int[n][n];for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {matrix_new[j][n - i - 1] = matrix[i][j];}}for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {matrix[i][j] = matrix_new[i][j];}}}
}

解法 2: 原地旋转

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for (int i = 0; i < n / 2; ++i) {for (int j = 0; j < (n + 1) / 2; ++j) {int temp = matrix[i][j];matrix[i][j] = matrix[n - j - 1][i];matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];matrix[j][n - i - 1] = temp;}}}
}

T20: 54. 螺旋矩阵(中等)

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

解法: 到边界换方向

class Solution {public List<Integer> spiralOrder(int[][] matrix) {int m=matrix.length,n=matrix[0].length;// c表示旋转的层数,不足一层按照一层处理int c =Math.min((m+1)/2,(n+1)/2);List<Integer> res = new ArrayList<>();// 一个人走路一样,一直走,走的边界处就换方向for(int i=0;i<c;i++){for(int j=i;j<n-i;j++){res.add(matrix[i][j]);}for(int j=i+1;j<m-i;j++){res.add(matrix[j][n-i-1]);}// 对于重复的行校验for(int j=n-i-2; m-i-1 > i &&j>=i;j--){res.add(matrix[m-i-1][j]);}// 对于重复的列进行校验for(int j=m-i-2; n-i-1 > i && j>i;j--){res.add(matrix[j][i]);}}return res;}
}

T21: 240. 搜索二维矩阵 II (中等)

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

示例 1:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:

m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matix[i][j] <= 109
每行的所有元素从左到右升序排列
每列的所有元素从上到下升序排列
-109 <= target <= 109

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-a-2d-matrix-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

右上或左下, while横纵条件都要考虑

解法:

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = 0, n = matrix[0].length-1;while(n>=0&&m<matrix.length){if(target>matrix[m][n]){m++;}else if(target<matrix[m][n]){n--;}else if(target==matrix[m][n]){return true;}}return false;}
}

执行用时:6 ms, 在所有 Java 提交中击败了**91.57%**的用户

内存消耗:44.2 MB, 在所有 Java 提交中击败了**27.69%**的用户

LeetCode 07: T48. 旋转图像 (中等); T54. 螺旋矩阵(中等); T240. 搜索二维矩阵 II (中等)相关推荐

  1. LeetCode 240. 搜索二维矩阵 II(二分查找 分治)

    文章目录 1. 题目 2. 解题 2.1 从左下角或者右上角开始搜索 2.2 分治算法 1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以 ...

  2. 【LeetCode】【HOT】240. 搜索二维矩阵 II(抽象二叉搜索树)

    [LeetCode][HOT]240. 搜索二维矩阵 II 文章目录 [LeetCode][HOT]240. 搜索二维矩阵 II package hot;public class Solution24 ...

  3. LeetCode Algorithm 240. 搜索二维矩阵 II

    240. 搜索二维矩阵 II Ideas 这题我记得在左神算法初级班里面有. 主要的思想就是定义两个指针row_index和col_index,从右上角开始逐个搜索. 如果matrix[row_ind ...

  4. Java 搜索二维矩阵 II

    搜索二维矩阵 II 中等 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target .该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示 ...

  5. 机器学习之数学基础(二)~数组、向量、矩阵、向量空间、二维矩阵

    1. 概述 在学习机器学习(machine learning)或模式识别(pattern recognition)过程中,我经常会困惑于向量.数组和矩阵这三种数据结构,而在学习张学工教授<模式识 ...

  6. python 搜索二维矩阵

    搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...

  7. LintCode 28. 搜索二维矩阵

    import org.junit.Test;import java.util.Arrays;public class SearchMatrix {/*** @param matrix: matrix, ...

  8. 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)

    一,题目: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3) ...

  9. 利用可达矩阵判断连通性_leetcode240. 搜索二维矩阵 II

    leetcode240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上 ...

最新文章

  1. Linux中rsync备份数据使用实例
  2. 2010有道难题练习赛2
  3. redis sorted_set数据类型常用命令及跳表skip_list原理
  4. 独立开发人员的自由之路 ——1
  5. springboot 两个src_springboot application.properties 写多个配置文件怎么写
  6. 一个关于导出excel模板的实例
  7. springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
  8. Netty in action—EventLoop和线程模型
  9. 从代码到300优质客户,用户画像在销售的实战应用
  10. 从零开始学习Java设计模式 | 设计模式入门篇:教程导读
  11. ubuntu18.04装N卡驱动后无法开机或关机的解决方法
  12. 京东到家埋点治理实践
  13. CAD中怎么修改图块名称?CAD图块改名教程
  14. LEX自动生成词法分析器
  15. 关于百度站长工具中站点属性LOGO提交申请详解说明
  16. 【A类】云计算、存储、网络、服务器等课程集
  17. 常见的编码格式/txt文件乱码
  18. 时间序列学习(3):AR、MA及ARMA模型
  19. MPU6500模块调试笔记——小心冒牌货
  20. 三分钟就能快速注册好域名的方法

热门文章

  1. Novamind 5 安装+和谐----请在补丁前关闭文件,和谐不成功
  2. 打开PowerShell时,显示Windows找不到文件怎么办
  3. 致诸弟·劝弟谨记进德修业
  4. 【C语言】总体脉络-知识框架
  5. VIN码车架号 麦谈帮API数据接口
  6. [业界] 关于诺基亚,上来吐槽两句埃洛普,顺便爆点料。
  7. Kali Linux渗透测试--windows 10入侵和提权过程
  8. Distributed Database Using Sharding Database Architecture论文阅读
  9. 基础练习 Sine之舞
  10. 苹果osx系统切换中文