Leetcode 面试150题 189. 轮转数组 中等

server/2024/11/29 22:43:12/

系列博客目录


文章目录

  • 系列博客目录
  • 189. 轮转数组 中等
  • 示例 1
  • 示例 2
  • 解答


189. 轮转数组 中等

链接

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

示例 1

输入: nums = [1, 2, 3, 4, 5, 6, 7], k = 3
输出: [5, 6, 7, 1, 2, 3, 4]
解释: 
向右轮转 1 步: [7, 1, 2, 3, 4, 5, 6]
向右轮转 2 步: [6, 7, 1, 2, 3, 4, 5]
向右轮转 3 步: [5, 6, 7, 1, 2, 3, 4]

示例 2

输入: nums = [-1, -100, 3, 99], k = 2
输出: [3, 99, -1, -100]
解释: 
向右轮转 1 步: [99, -1, -100, 3]
向右轮转 2 步: [3, 99, -1, -100]

提示

  • 1 <= nums.length <= 10^5
  • -2^31 <= nums[i] <= 2^31 - 1
  • 0 <= k <= 10^5

进阶
尽可能想出更多的解决方案,至少有 三种不同的方法 可以解决这个问题。
你可以使用 空间复杂度为 O(1)原地算法 来解决这个问题吗?


解答

一开始认为只要新建一个数组,然后根据k把原数组的值先在新数组中填到对应的位置即可,然后把新数组的值赋值到原数组即可。

class Solution {public void rotate(int[] nums, int k) {int[] result = new int[nums.length];for (int i = k; i < result.length; i++) {result[i] = nums[i-k];}for (int i = 0; i < k; i++) {result[i] = nums[nums.length-k+i];}for (int i = 0; i < nums.length; i++) {nums[i] = result[i];}}
}

后来,发现k可能比数组长度大,那样的话上面i-k肯定会超范围。以为添加如下代码在前面即可。但是其实不对,比如nums = [1, 2, 3, 4, 5, 6, 7], k 为8和9,他是不一样的。

if(nums.length<=k){return;
}

然后就修改为了,根据k,分成k步,每次把最后面插入到最前面。但是OJ(online judge)会超时间限制“Time Limit Exceeded”(TLE)。后来发现,其实如果k大于数组的长度,k的前面数组长度部分对数组的操作其实是没必要的,相当于一步一步不断从最后插入第一个,操作了一轮,实则没有变化。
最后得到了自己的答案如下。

class Solution {public void rotate(int[] nums, int k) {int[] result = new int[nums.length];int index=k%nums.length;for (int i = index; i < result.length; i++) {result[i] = nums[i-index];}for (int i = 0; i < index; i++) {result[i] = nums[nums.length-index+i];}for (int i = 0; i < nums.length; i++) {nums[i] = result[i];}}
}

http://www.ppmy.cn/server/146010.html

相关文章

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…

pyhton+yaml+pytest+allure框架封装-全局变量渲染

我们在日常测试中 会有一个接口中多个值的情况 比如这种 { "name": "thread", "value": "4986-MainThread", "status": "framework", "start": "pytest", …

Jetpack业务架构(ViewModel)

ViewModel是Jetpack AAC的重要组件&#xff0c;同时也有一个同名抽象类。 ViewModel&#xff0c;意为 视图模型&#xff0c;即为界面准备数据的模型。简单理解就是&#xff0c;ViewModel为UI层提供数据。 1ViewModel使用&#xff1a; ①思路&#xff1a; 导入依赖 继承ViewMo…

2024.11.28(作业)

思维导图 功能函数声明文件 #ifndef _FUN_H__ #define _FUN_H__ #include <myhead.h>#define MAX 50 //数组大小 #define QAZ 20 //长度和字符串大小typedef int datatype; //数据元素类型//2.1 定义顺序表类型 typedef struct {datatype data[MAX];int len; }S…

【Linux】Linux进程控制

【Linux】Linux进程控制 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 1. 进程创建 1.1 初始 fork 函数 1.2 写时拷贝 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法…

3.10 内核 BUG_ON() at xfs_vm_writepage() -> page_buffers()

目录 前言 问题分析 page buffers创建 page buffers丢失 Write-Protect Dirty Page w/o Buffers 问题解决 前言 这个问题发生在3.10.0-514.el7上&#xff0c;并且在RHEL的知识库中快速找到了对应的案例以及解决方案&#xff0c;但是&#xff0c;理解问题如何发生和解决…

用于自然语言处理的循环神经网络RNN

前一篇&#xff1a;《人工智能模型学习到的知识是怎样的一种存在&#xff1f;》 序言&#xff1a;在人工智能领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;备受瞩目&#xff0c;但神经网络的种类远不止于此。实际上&#xff0c;不同类型的神经网络各有其独特的应用…

【青牛科技】D2761音频限幅器,适合在个人电脑、便携式音响等系统中作音频限幅用。

概述&#xff1a; D2761是为保护扬声器所设计的音频限幅器&#xff0c;其限幅值可通过外接电阻来调节&#xff0c;适合在个人电脑、便携式音响等系统中作音频限幅用。D2761采用SSOP10、MSOP10、TSSOP14的封装形式封装。 主要特点&#xff1a;  工作电压范围宽&#xff1a;2.…