面试经典 150 题 ---- 轮转数组

面试经典 150 题 ---- 轮转数组

  • 轮转数组
    • 方法一:使用额外的数组
    • 方法二:数组翻转

轮转数组

方法一:使用额外的数组

我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度,我们遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+k) mod n 的位置,最后将新数组拷贝至原数组即可。

class Solution {public void rotate(int[] nums, int k) {int len = nums.length;int[] newArr = Arrays.copyOf(nums, len);for (int i = 0; i < len; i ++ ) {nums[(i + k) % len] = newArr[i];}}
}

时间复杂度: O(n)
空间复杂度: O(n)

java 中拷贝数组的方法:

  1. System.arraycopy() 方法:
System.arraycopy(源数组, 源数组起始位置, 目标数组, 目标数组起始位置, 拷贝长度);
int[] sourceArray = {1, 2, 3, 4, 5};
int[] destinationArray = new int[5];
System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length);
  1. Arrays.copyOf() 方法:
int[] newArray = Arrays.copyOf(源数组, 新数组长度);
int[] sourceArray = {1, 2, 3, 4, 5};
int[] newArray = Arrays.copyOf(sourceArray, sourceArray.length);
  1. Arrays.copyOfRange() 方法:
int[] newArray = Arrays.copyOfRange(源数组, 起始位置, 结束位置);
int[] sourceArray = {1, 2, 3, 4, 5};
int[] newArray = Arrays.copyOfRange(sourceArray, 0, sourceArray.length);
  1. 使用clone() 方法:
int[] newArray = sourceArray.clone();
int[] sourceArray = {1, 2, 3, 4, 5};
int[] newArray = sourceArray.clone();

方法二:数组翻转

我们将数组向右移动 k 个位置,那么数组尾部的 k % n 个元素就会移动到数组的头部,同样数组中其它元素就会向后移动 k % n 个位置。
我可以将整个数组进行一次翻转,这样尾部的 k % n 个数组就会移动到头部,然后再分别翻转 [0, k % n - 1] 部分的数组和 [k % n, n - 1] 部分的数组就可以得到答案。

在这里插入图片描述

class Solution {public void rotate(int[] nums, int k) {int len = nums.length;reverse(nums, 0, len - 1);reverse(nums, 0, k % len - 1);reverse(nums, k % len, len - 1);}public void reverse(int[] nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start += 1;end -= 1;}}
}

时间复杂度: O(n)
其中 n 为数组的长度。每个元素被翻转两次,一共 n 个元素,因此总时间复杂度为 O(2n)=O(n)

空间复杂度: O(1)

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

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

相关文章

[AutoSar]BSW_Com07 CAN报文接收流程的函数调用

目录 关键词平台说明一、背景二、顺序总览三、函数说明3.1 Com_RxIndication&#xff08;&#xff09; 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)…

Python实现双向链表:从基础到应用

一、引言 双向链表是一种比单向链表更复杂的数据结构&#xff0c;每个节点除了包含数据和指向下一个节点的指针外&#xff0c;还包含一个指向前一个节点的指针。这种结构使得我们可以从链表的任何节点开始&#xff0c;向前或向后遍历链表。 目录 一、引言 二、节点定义 三、…

CDN原理探究

来源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通过上图&#xff0c;我们可以了解到&#xff0c;使用了CDN缓存后的网站的访问过程变为&#xff1a; 用户向浏览器提供要访问的域名&#xff…

模型练习史

文章目录 肌肉光头vikingtorso死侍蓝毒液卡通girlwalletdog headman anatomy总结 肌肉光头 viking torso 死侍 蓝毒液 卡通girl wallet dog head man anatomy 总结 zbrush 与 blender 结合使用, 善 !

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

多线程万字详解

进程和线程是计算机程序执行的两个重要概念。 1.进程&#xff1a; 进程是操作系统分配资源的基本单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;每启动一个进程&#xff0c;系统就会为它分配内存。进程间通信比较复杂&#xff0c;需要用到IPC&#xff08;InterP…

动态规划--(算法竞赛、蓝桥杯)--二维费用背包

1、B站视频链接&#xff1a;E15 背包DP 二维费用背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int f[101][101]; //f[j][k]第i件物品&#xff0c;体积<j,重量<k的最大价值int main(){int n,V,W;//物品、容量、承重int v,w,val;//体积、重…

信息收集2.0版本

内网渗透之信息收集 whois查询 1.1.1.1. 在线网站查询 输入相关的域名即可进行查询。 &#xff08;1&#xff09;站长之家&#xff1a;whois域名查询&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;爱站工具网&#xff1a;whois域名查询&#xff1a;站长…

ventoy制作启动U盘

Ventoy新一代多系统启动U盘解决方案。国产开源U盘启动制作工具&#xff0c;支持Legacy BIOS和UEFI模式&#xff0c;理论上几乎支持任何ISO镜像文件&#xff0c;支持加载多个不同类型的ISO文件启动&#xff0c;无需反复地格式化U盘。把ISO系统文件拷贝到U盘&#xff0c;U盘插入电…

Container killed on request. Exit code is 143

Bug信息 WARN YarnAllocator: Container marked as failed: container_e33_1480922439133_0845_02_000002 on host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 Killed by externa…

docker mysql主从复制

新建主服务器容器实例3301 mysql 主 3301 docker run -p 3301:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -v /home/mysql/mysql-files:/var/lib/…

2024 年 20 个最佳移动应用测试工具

技术在不断发展&#xff0c;用户的期望也在不断发展。在这种情况下&#xff0c;组织面临的挑战是提供完美、直观且可靠的体验。这使得移动应用程序测试成为满足这些需求的开发过程的重要组成部分。测试可确保应用程序能够跨多种设备、操作系统和用户场景无缝运行&#xff0c;从…