【算法练习】数组操作

二维数组顺时针旋转

解决思路

  1. 创建新数组,将原数组的数据按照一定的顺序放入新数组中。
  2. 如果是顺时针的话,原数组中第一排的元素是应该放在新数组最后一列中的。

Java实现

java 复制代码
public class RotateOne {

    public static void main(String[] args) {
        int[][] A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int n = 3;
        int[][] B = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                B[j][n - 1 - i] = A[i][j];
            }
        }
        ArrayUtil.printArray(B);
    }
}

二维数组逆时针旋转

解决思路

  1. 逆时针的话,原数组第一排的元素放在新数组的第一列

Java实现

java 复制代码
public class RotateTwo {

    public static void main(String[] args) {
        int[][] A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int n = 3;
        int[][] B = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                B[n - 1 - j][i] = A[i][j];
                //A[0][0]-->B[2][0]
                //A[0][1]-->B[1][0]
            }
        }
        ArrayUtil.printArray(B);
    }
}

螺旋矩阵

https://leetcode.cn/problems/spiral-matrix/

解决思路

  1. 设定数组的边界,并且不断的更新边界值。
  2. 跳出循环的条件,当更新边界值不满足条件的时候,跳出循环。

Java实现

java 复制代码
class Solution_LC54_II {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if (matrix.length == 0) {
            return res;
        }

        int top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1;
        while (true) {
            for (int i = left; i <= right; i++) {
                res.add(matrix[top][i]);
            }
            if (++top > bottom) {
                break;
            }
            for (int i = top; i <= bottom; i++) {
                res.add(matrix[i][right]);
            }
            if (--right < left) {
                break;
            }
            for (int i = right; i >= left; i--) {
                res.add(matrix[bottom][i]);
            }
            if (--bottom < top) {
                break;
            }
            for (int i = bottom; i >= top; i--) {
                res.add(matrix[i][left]);
            }
            if (++left > right) {
                break;
            }
        }
        return res;
    }
}
相关推荐
兰令水12 分钟前
leecodecode【面试150】【2026.6.14打卡-java版本】
java·算法·面试
noipp7 小时前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
程序员二叉8 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木8 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕8 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
北域码匠9 小时前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
手写码匠10 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe110 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
Matrix_1111 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue11 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist