旋转数组(java实现)

一、题目

新年第一题,避免老年痴呆!
题源:牛客

一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后 M 个数循环移至最前面的 M 个位置)。
如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

数据范围:整数范围
进阶:空间复杂度O(1) ,时间复杂度O(n)

例:
6,2 [1,2,3,4,5,6]
[5,6,1,2,3,4]

二、思路

  1. 将数组 0 ~ n-m-1 的子数组翻转一下。(4,3,2,1,5,6)
  2. 将数组n-m ~ n-1 的子数组翻转一下。(4,3,2,1,6,5)
  3. 将数组0 ~ n-1 直接翻转一下。(5,6,1,2,3,4)
  4. over !

三、代码

 public static void main(String[] args) {//一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,// 即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )// (最后 M 个数循环移至最前面的 M 个位置)。// 如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?////数据范围:,//进阶:空间复杂度 ,时间复杂度// 6,2 [1,2,3,4,5,6]// [5,6,1,2,3,4]// 1、现将1~n-m数据翻转 n-m~n数据翻转 最后将1~n数据翻转Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();ArrayList<Integer> nums = new ArrayList<>();for(int i = 0 ; i < n ; i++){int num = scanner.nextInt();nums.add(num);}overturn(nums,0,n-m-1);overturn(nums,n-m,n-1);overturn(nums,0,n-1);System.out.println(nums);}public static void overturn(List<Integer> nums , int start,int end){int mid = (start + end)/2;for(int i=start; i<=mid; i++){//交换Integer startNum = nums.get(i);nums.set(i,nums.get(end));nums.set(end,startNum);end--;}}

ps:仅提供思路,不保证代码能oc

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

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

相关文章

AI算法初识之分类汇总

一、背景 AI算法的分类方式多种多样&#xff0c;可以根据不同的学习机制、功能用途以及模型结构进行划分。以下是一些主要的分类方式及相应的代表性算法&#xff1a; 1. 按照学习类型 - **监督学习**&#xff1a; - 线性回归&#xff08;Linear Regression&#xff09; …

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

android pdf框架-3,对开源库的探究1

目录 pdfiumandroid相关的库 基于vudroid的 库 非开源库:

C/C++内存管理详解

目录 一、C内存分布 二、C语言与C内存管理方式 1、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 2、C中的内存管理方式&#xff1a;new/delete 三、operator new与operator delete函数 1、函数概念&#xff1a; 2、函数使用&#xff1a; 3、底层原理…

android pdf框架-3,基于recyclerview修改

基于recyclerview的实现版本 解析使用的是pdifum.这个库缺点是缩放功能不行.点击链接功能没有.只有渲染. GitHub - danjdt/android-pdfviewer: A Android PDF Viewer that render pdf using PdfRenderer and displays it in a RecyclerView. recyclerview的滑动并不是像ios那…

Nginx补充

backup: upstream wwwPools {server 192.168.233.140 down; # 前端服务器1&#xff0c;标记为宕机状态server 192.168.233.141 down; # 前端服务器2&#xff0c;标记为宕机状态server 192.168.233.144 backup; # 备用服务器&#xff0c;只有在其他服务器都宕机时才会使用 }…

Javaweb之SpringBootWeb案例之AOP通知顺序的详细解析

3.2 通知顺序 讲解完了Spring中AOP所支持的5种通知类型之后&#xff0c;接下来我们再来研究通知的执行顺序。 当在项目开发当中&#xff0c;我们定义了多个切面类&#xff0c;而多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候&#xff0c;这多…

鸿蒙新手入门-环境准备问题解析

Node.js版本与API配套关系 由于SDK的部分工具依赖Node.js运行时&#xff0c;推荐使用配套API版本的Node.js&#xff0c;保证工程的兼容性。 匹配关系见下表&#xff1a; API LevelNode.js支持范围API Level≤914.x&#xff08;≥14.19.1&#xff09;、16.xAPI Level>914.…

2024前端面试准备之TypeScript篇(二)

全文链接 1. TypeScript中的装饰器是什么以及如何使用 装饰器是一种特殊的函数,用于修改或增强其他函数的功能。在TypeScript中,装饰器可以用于类、方法、属性和参数上。 装饰器使用特殊的语法符号@,后跟一个装饰器函数。装饰器函数可以接收不同的参数,具体取决于装饰器…

利用R语言绘制相关性热图

数据示例&#xff08;归一化处理后&#xff09;&#xff1a; install.packages("corrplot") install.packages("ggplot2") install.packages("ggpubr") library(corrplot) install.packages("GGally") library(GGally) library(ggplot…

读十堂极简人工智能课笔记06_自然语言处理

1. 聊天机器人 1.1. 人工智能往往掌握不了跨越几段对话语境的讨论 1.1.1. 抓不住连贯的主题&#xff0c;只能单独处理每个句子 1.1.2. 不能将其答案与现实联系起来 1.1.3. 可能会遵循语言规则、统计相关性&#xff0c;甚至查找有关事实来为每个新句子提供答复 1.2. 聊天机…

html 动态设置下拉选项

在HTML中&#xff0c;如果你想动态设置下拉选项&#xff08;<select>元素中的<option>&#xff09;&#xff0c;你可以使用JavaScript。以下是一个示例&#xff0c;展示了如何使用JavaScript来动态添加下拉选项&#xff1a; <!DOCTYPE html> <…

【JVM篇】什么是类加载器,有哪些常见的类加载器

文章目录 &#x1f354;什么是类加载器&#x1f6f8;有哪些常见的类加载器 &#x1f354;什么是类加载器 负责在类加载过程中&#xff0c;将字节码信息以流的方式获取并加载到内存当中 &#x1f6f8;有哪些常见的类加载器 启动类加载器 启动类加载器是有Hotspot虚拟机通过的类…

ETAS安装OS Port需要注意事项

安装OS Port用来配置OS和相关的中断&#xff1b;按照安装手册《HowToInstallingRTA-CAR.pdf》安装完OS PORT如下位置会有安装包&#xff08;正确的安装位置&#xff09; VRTA为虚拟OS &#xff1a;没有具体芯片和编译器的试用

【牛客】寒假训练营1 I-It‘s bertrand paradox. Again! 题解

传送门&#xff1a;It’s bertrand paradox. Again! 标签&#xff1a;随机 题目大意 有两个人分别用两种方式在二维平面上随机生成1e5个圆&#xff0c;每个圆上的每一个点(x,y)都满足-100<x<100且-100<y<100&#xff0c;现在将某个人生成的1e5个圆的圆心和半径告…

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

背景 基于前面搭建的3节点 Kubernetes 集群&#xff0c;今天我们使用 Registry2 搭建私有镜像仓库&#xff0c;这在镜像安全性以及离线环境下运维等方面具有重要意义。 Note: 由于是测试环境&#xff0c;以下创建了一个 local-storage 的 StorageClass &#xff0c;并使用本地…

机器学习算法的最新进展

前言 随着技术的不断发展&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09;已经从理论研究的象牙塔走向了实际应用的前线。现代机器学习算法不仅在诸多领域取得了显著的成就&#xff0c;更是推动了人工智能&#xff08;Artificial Intelligence, AI&…

【设计模式】4、策略模式

文章目录 一、问题二、解决方案2.1 真实世界的类比2.2 策略模式结构2.3 适用场景2.4 实现方式2.5 优缺点2.6 与其他模式的关系 三、示例代码3.1 go3.2 rust 策略模式是一种行为设计模式&#xff0c;它能定义一系列算法&#xff0c;把每种算法分别放入独立的类中&#xff0c;以是…

【动态规划:最短编辑路径】的应用:excel diff功能

开篇说明 如果在这里获得过启发和思考&#xff0c;希望点赞支持&#xff01;对于内容有不同的看法欢迎来信交流。 技术栈 >> java 邮箱 >> 15673219519163.com 描述 在游戏行业中通常使用excel做配表&#xff0c;修改配表是一个频繁的操作。在修改之后&#xff…

政安晨:【完全零基础】认知人工智能(三)【超级简单】的【机器学习神经网络】—— 三层神经网络示例

知识准备 咱们还没有演示过使用矩阵进行计算得到经由神经网络馈送的信号&#xff0c;我们也没有演示过多于2层的神经网络示例&#xff0c;在这篇文章里&#xff0c;咱们将构建一个三层神经网络的示例&#xff0c;并观察如何处理中间层的输出以作为最后第三层的输入&#xff0c…