Java刷题:轮转数组

news2024/11/11 5:44:30

目录

题目

解题思路

完整代码


题目

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]

解题思路

主要的解题思路是,先把整个数组翻转过来,再把要翻转的部分翻转为正确顺序,最后再把剩余的部分翻转回来,这就是说总体上有三次大翻转,其余的小翻转次数暂时不计。

首先我们可以先自己实现一个reverse方法,来实现数组中部分元素位置的交换,这里和之前学过的数值交换的方法很像。

    private void reverse(int[] nums, int i, int j) {
        while (i < j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            i++;
            j--;
        }
    }

从上面题目所描述的要求我们能得出这样一个规律:

轮转k次 等于 轮转k%n次

   public void rotate(int[] nums, int k) {
        int n = nums.length;
        k %= n; // 
        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n - 1);
    }

完整代码

class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k %= n; // 轮转 k 次等于轮转 k%n 次  k = 3
        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n - 1);
    }

    private void reverse(int[] nums, int i, int j) {
        while (i < j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            i++;
            j--;
        }
    }
}


public class Test {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] arr = {1,2,3,4,5,6,7};
        solution.rotate(arr,3);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

如果,对于其中某些步骤不是很了解的情况下,可以通过调试的方式,慢慢来了解里面的含义,关于调试部分,可以看这部分:Java刷题:移除数组中与k值相等的元素-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决.NET8 类库Debug时,Debug文件夹中不包含Packages中引入的文件

最近在开发中使用了.NET8 Razor类库项目&#xff0c;但是惊讶的发现Debug时&#xff0c;Debug文件夹中不包含Packages中引入的文件&#xff0c;本以为是非常小的问题&#xff0c;但是被困住了竟然足足4个小时。 其实它也本就是个非常非常小的问题…… 只需引入<CopyLocalL…

智驭灌区,科技领航—— 高效灌区信息化系统管理平台

在水资源日益珍贵的今天&#xff0c;传统灌区的粗放式管理模式已难以满足现代农业的发展需求。我们自豪地推出——灌区信息化系统管理平台&#xff0c;以科技赋能水利&#xff0c;引领灌溉管理进入智能化、精细化新时代。 【智能决策&#xff0c;精准灌溉】 告别传统灌溉的盲目…

84.WEB渗透测试-信息收集-框架组件识别利用(8)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;83.WEB渗透测试-信息收集-框架组件识别利用&#xff08;7&#xff09; 识别的作用&#…

【初阶数据结构题目】15.有效的括号

有效的括号 点击链接答题 思路&#xff1a; 定义一个指针ps遍历字符串 若ps遍历到的字符为左括号&#xff0c;入栈 若ps遍历到的字符为右括号&#xff0c;取栈顶元素与ps进行比较&#xff0c; 栈顶元素 匹配 *ps&#xff0c;出栈&#xff0c;ps栈顶元素 不匹配 *ps&#xff0c…

【Python】nn.CTCLoss()函数详解与示例

前言 在深度学习领域&#xff0c;特别是在处理序列到序列的预测任务时&#xff0c;如语音识别和手写识别&#xff0c;nn.CTCLoss函数是一个非常重要的工具。本文将详细解析PyTorch中的nn.CTCLoss函数&#xff0c;包括其原理、原型和示例。 前言函数原理CTC算法简介CTC Loss函数…

Golang在整洁架构基础上实现事务

前言 大家好&#xff0c;这里是白泽&#xff0c;这篇文章在 go-kratos 官方的 layout 项目的整洁架构基础上&#xff0c;实现优雅的数据库事务操作。 视频讲解 &#x1f4fa;&#xff1a;B站&#xff1a;白泽talk 本期涉及的学习资料&#xff1a; 我的开源Golang学习仓库&am…

【随笔】详解Java POI及其使用方法

引言 随着企业和开发者对数据处理需求的不断增加&#xff0c;操作Excel文件已经成为日常编程工作的重要部分。在Java中&#xff0c;Apache POI&#xff08;Poor Obfuscation Implementation&#xff09;库虽然首页其貌不扬&#xff0c;但它绝对是处理Excel文件的强大工具。本文…

JavaWeb之servlet关于Ajax实现前后端分离

一、什么是Ajax: AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部…

proteus仿真c51单片机(四)双机串口通信(电路设计及代码)

实验要求 1.通过甲机的按键给乙机发送控制字符&#xff0c;同时也可以实现乙机给甲机发送控制字符 2&#xff0e;用PROTEUS软件根据所给电路画出电路图&#xff0c;用KEIL软件调试程序和编译&#xff0c;最后在PROTEUS软件中实现仿真。 3.甲乙两个单片机通过串口进行通信&am…

Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N]……解决

一、问题 Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.二、解决方案 1、当打包构建的时候出现这个问题&#xff0c;如果你只是打包部署&#xff0c;那么就是将maven的test禁止可以成功打包 2、当你是本地服务器启动…

前端模块化-理解Tapable与Webpack中的Hooks

前言 Webpack 中的核心架构是基于 Tapable 实现的&#xff0c;Tapable 是一个类似于 Node.js 的 EventEmitter 的库&#xff0c;专门用于实现发布-订阅模式。Webpack 中的核心组件 Compiler、Compilation、Module、Chunk、ChunkGroup、Dependency、Template 都是通过 Tapable …

Fiddler安装与使用

下载Fiddler 访问Fiddler官方网站&#xff0c;下载适用于您操作系统的最新版本Fiddler。目前&#xff0c;Fiddler支持Windows、macOS和Linux平台。 Web Debugging Proxy and Troubleshooting Tools|Fiddler (telerik.com) 安装Fiddler&#xff0c;以Windows为例 Windows用户…

gitlab给用户添加项目权限

1.进入管理员界面 2.进入群组 3.添加用户

【RISC-V设计-04】- RISC-V处理器设计K0A之架构

【RISC-V设计-04】- RISC-V处理器设计K0A之架构 文章目录 【RISC-V设计-04】- RISC-V处理器设计K0A之架构1. 简介2. 主要特点3. 结构框图4. 指令列表5. CSR指令集6. 中断返回指令7. 总结 1. 简介 在前几篇文章中&#xff0c;介绍了RISC-V处理器的结构和指令集&#xff0c;从本…

Animate软件基本概念:视频及音频

视频和音频是ANimate软件中比较重要的素材类型。 FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff1a;A…

DSP如何进行竞价

下面根据DSP的系统构成还拆解讲解里面的各个模块&#xff0c;这一节将竞价系统&#xff0c;也就是竞价流程 0、负载均衡 增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 1、ADX发起竞价请求 上面会携带User ID等用户信息和广告信息一大堆信息。 2、解析竞价…

fastadmin 表单添加默认搜索条件

项目场景&#xff1a;员工列表&#xff0c;查看员工邀约客户明细&#xff0c;在 dialog 窗口中的 table怎么获取当前员工的数据呢&#xff1f;看似简单的需求&#xff0c;实际操作起来还是有点考究的&#xff0c;记录一下实现步骤。 页面1&#xff1a;员工列表 页面2&#xff…

sql_day14(获取各门店的面积)

描述&#xff1a;获取各门店的面积 获取各门店的面积 门店面积信息可以从分店面积明细表中获取。 先取实际经营面积(8)&#xff0c; 如果取不到&#xff08;实际经营面积为空&#xff09;再取经营面积(7)。 如果取不到&#xff08;经营面积为空&#xff09;再取合同面积(1)。…

AI大模型赋能开发者|海云安创始人谢朝海受邀在ISC.AI 2024大会就“大模型在软件开发安全领域的应用”主题发表演讲

近日&#xff0c;ISC.AI 2024 第十二届互联网安全大会在北京国家会议中心盛大开幕。作为全球规格最高、规模最大、影响力最深远的安全峰会之一&#xff0c;本次大会以“打造安全大模型 引领安全行业革命”为主题&#xff0c;聚焦安全与AI两大领域&#xff0c;吸引了众多行业领袖…

您知道Jmeter中Redirect Automatically 和 Follow Redirects的使用场景吗?

相信很多使用过jmeter的同学都没有关注过请求中的Redirect Automatically 和 Follow Redirects选项&#xff0c;如下图&#xff1a; 在 JMeter 中&#xff0c;Redirect Automatically 和 Follow Redirects 是与 HTTP 请求重定向相关的两个选项&#xff0c;它们之间是有很大区别…