【三次翻转】旋转数组

求解代码

java 复制代码
public int[] solve(int n, int m, int[] a) {
        m %= n;
        reverse(a, 0, n - 1);
        reverse(a, 0, m - 1);
        reverse(a, m, n - 1);
        return a;
    }

    private void reverse(int[] arr, int start, int end) {
        while (start < end) {
            swap(arr, start++, end--);
        }

    }

    private void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

小贴士

因为右移 n 位 = 没动右移 n + k 位 = 右移 k 位

所以,要通过取余操作把 m 压缩到 [0, n-1] 范围。

相关推荐
yzy858 小时前
数据同步工具 -- syncthing
开发语言
catchadmin8 小时前
PHP 应用 security.txt 漏洞披露实践
开发语言·php
糖果店的幽灵8 小时前
LangChain 1.3 完全教程:从入门到精通-Part 11: Tools(工具系统)
开发语言·langchain·c#
夜勤月8 小时前
AQS 与 ThreadPoolExecutor 深度拆解:JDK 高并发底层设计精髓
android·java·开发语言
luj_17688 小时前
R语言生态优势与学习曲线分析
c语言·开发语言·网络·经验分享·算法
phltxy8 小时前
Spring AI 应用开发
java·人工智能·spring
程序大视界8 小时前
【C++ 从基础到项目实战】C++(二):数组、字符串与结构体——组织数据的容器
开发语言·c++·cpp
码不停蹄的玄黓8 小时前
Arthas 线上问题排查实战:CPU过高、频繁GC
java
Michaelwubo8 小时前
swagger全集通+mock(prism)
java
叶子野格8 小时前
《C语言学习:文件操作》16
c语言·开发语言·c++·学习·visual studio