LeetCode 07: T48. 旋转图像 (中等); T54. 螺旋矩阵(中等); T240. 搜索二维矩阵 II (中等)
文章目录
- 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 (中等)相关推荐
- LeetCode 240. 搜索二维矩阵 II(二分查找 分治)
文章目录 1. 题目 2. 解题 2.1 从左下角或者右上角开始搜索 2.2 分治算法 1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以 ...
- 【LeetCode】【HOT】240. 搜索二维矩阵 II(抽象二叉搜索树)
[LeetCode][HOT]240. 搜索二维矩阵 II 文章目录 [LeetCode][HOT]240. 搜索二维矩阵 II package hot;public class Solution24 ...
- LeetCode Algorithm 240. 搜索二维矩阵 II
240. 搜索二维矩阵 II Ideas 这题我记得在左神算法初级班里面有. 主要的思想就是定义两个指针row_index和col_index,从右上角开始逐个搜索. 如果matrix[row_ind ...
- Java 搜索二维矩阵 II
搜索二维矩阵 II 中等 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target .该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示 ...
- 机器学习之数学基础(二)~数组、向量、矩阵、向量空间、二维矩阵
1. 概述 在学习机器学习(machine learning)或模式识别(pattern recognition)过程中,我经常会困惑于向量.数组和矩阵这三种数据结构,而在学习张学工教授<模式识 ...
- python 搜索二维矩阵
搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...
- LintCode 28. 搜索二维矩阵
import org.junit.Test;import java.util.Arrays;public class SearchMatrix {/*** @param matrix: matrix, ...
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
一,题目: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3) ...
- 利用可达矩阵判断连通性_leetcode240. 搜索二维矩阵 II
leetcode240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上 ...
最新文章
- Linux中rsync备份数据使用实例
- 2010有道难题练习赛2
- redis sorted_set数据类型常用命令及跳表skip_list原理
- 独立开发人员的自由之路 ——1
- springboot 两个src_springboot application.properties 写多个配置文件怎么写
- 一个关于导出excel模板的实例
- springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
- Netty in action—EventLoop和线程模型
- 从代码到300优质客户,用户画像在销售的实战应用
- 从零开始学习Java设计模式 | 设计模式入门篇:教程导读
- ubuntu18.04装N卡驱动后无法开机或关机的解决方法
- 京东到家埋点治理实践
- CAD中怎么修改图块名称?CAD图块改名教程
- LEX自动生成词法分析器
- 关于百度站长工具中站点属性LOGO提交申请详解说明
- 【A类】云计算、存储、网络、服务器等课程集
- 常见的编码格式/txt文件乱码
- 时间序列学习(3):AR、MA及ARMA模型
- MPU6500模块调试笔记——小心冒牌货
- 三分钟就能快速注册好域名的方法