力扣189.轮转数组

news2024/11/26 2:36:02

给定一个整数数组 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 <= 105
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105
  • 进阶:

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

错误示范

void rotate(int* nums, int numsSize, int k) 
{
while(k--)//需要将k个数字放到前面
{
    
int end = nums[numsSize-1];//保存交换的数组末尾值
for(int i = numsSize-1;i>0;i--)//将末尾前的数组往后移一位

nums[i]=nums[i-1];

nums[0]=end;



}
}

由提示可知,错误在于超过时间限制

当数据过大时,常常会超过时间限制

计算其时间复杂度为n^2

故需要思考如何缩短时间复杂度

解法1

void rotate(int* nums, int numsSize, int k) 
{
int arr[numsSize];
    
for(int i=0;i<numsSize;i++)
arr[(i+k)%numsSize]=nums[i];

for(int i=0;i<numsSize;i++)
nums[i]=arr[i];



}

这种解法大大节约了时间复杂度

不过是一种以空间换时间的做法

将上一种解法的空间复杂度由1->n

时间复杂度由n^2->n

从而通过了题目

但并不是最优解

解法2

我们先来看一张图片

这样子来理解反转

后写出一个反转函数

void reserve(int *arr,int begin,int end)
{
while(begin<end)
{
int h=arr[begin];
arr[begin]=arr[end];
arr[end]=h;
begin++;
end--;
}

通过这个函数可以实现反转

如此便有了第二种解法

void reserve(int *arr,int begin,int end)
{
while(begin<end)
{
int h=arr[begin];
arr[begin]=arr[end];
arr[end]=h;
begin++;
end--;
}

}
void rotate(int* nums, int numsSize, int k) 
{
    k=k%numsSize;
int arr[numsSize];
reserve(nums,numsSize-k,numsSize-1);
reserve(nums,0,numsSize-k-1);
reserve(nums,0,numsSize-1);
}

如此,便在更低的时间解决了这道题目

并且完成题目中提到的一个挑战

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

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

相关文章

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令命令解释SHOW DATABASES&#xff1b;展示所有的数据库CREATE DATABASE 数据库名称; 创…

10以内数的分解

// 10以内数的分解.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> using namespace std; int main(int argc, char* argv[]){for (int i 2; i < 10; i){for (int j 1; j < i; j){printf("%d%d%d ",j…

CSS样式基础样式选择器(案例+代码实现+效果图)

目录 1.css样式的规则 2.引入css样式的方式 1)行内式 2)内嵌式 3)外链式 1-link导入 2-import导入 4)总 3.css基础选择器 1)标签选择器 案例&#xff1a;使用标签选择器编写一个圆 1.代码 2.效果 2)类选择器 案例&#xff1a;使用类选择器为div添加背景色 1.代码 2.效果 3)id…

深度探索Kali Linux的精髓与实践应用

Kali Linux简介 Kali Linux作为全球网络安全领域的首选操作系统之一&#xff0c;其强大的功能性及广泛的适用范围令人瞩目。除了上述基础介绍外&#xff0c;让我们深入探究Kali Linux的几个关键特性及其在实际操作中的具体应用案例。 Kali工具集成&#xff1a;全面的安全工具…

加湿器模块(5V STM32)

目录 一、介绍 二、模块原理 1.原理图 2.引脚描述 3.尺寸介绍 三、程序设计 main.c文件 jsq.h文件 jsq.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 加湿器模块通常是指在智能家居设备中负责增加室内空气湿度的部分&#xff0c;这种模块设计旨在改善干燥环…

osg 矩阵相关

下面结果是一样的 osg::Matrix mtrixx;mtrixx.makeRotate(90 / 180.f * osg::PI, osg::Vec3(1, 0, 0));osg::Matrix mtrixx12 osg::Matrix::rotate(90 / 180.f * osg::PI, 1, 0, 0); 备注&#xff1a; rotate或makerotate第一个参数是弧度&#xff0c;可以用 弧度值osg::in…

Pre-trained Natural Language Understanding for Task-Oriented Dialogue

前言 众所周知,预训练BERT语言模型在许多NLP任务重大放异彩,用来文本内容和语义的表征学习很有效果,而且大大降低了下游任务的训练时间。但是由于普通文本和任务型对话之间的语言模式的潜在差异,使得现在的预训练语言模型在实际使用中作用不大。 至于对话领域的预训练语言…

MS-900认证:Microsoft 365 Certified: Fundamentals

一、什么是MS-900认证&#xff1f; MS900认证&#xff0c;全称是 Microsoft 365 Fundamentals&#xff0c;是微软提供的一项认证考试&#xff0c;它旨在验证考生对 Microsoft 365 服务和功能的理解&#xff0c;包括云服务概念、核心服务、安全性、合规性、隐私以及支持和定价信…

【CTF Web】Pikachu CSRF(get) Writeup(CSRF+GET请求+社会工程学)

CSRF(跨站请求伪造)概述 Cross-site request forgery 简称为“CSRF”&#xff0c;在CSRF的攻击场景中攻击者会伪造一个请求&#xff08;这个请求一般是一个链接&#xff09;&#xff0c;然后欺骗目标用户进行点击&#xff0c;用户一旦点击了这个请求&#xff0c;整个攻击就完成…

IDEA的lombok插件不生效了?!!

记录一下&#xff0c;防止找不到解决方案&#xff0c;已经遇到好几次了 前面啰嗦的多&#xff0c;可以直接跳到末尾的解决方法&#xff0c;点击一下 问题现场情况 排查过程 确认引入的依赖正常 —》&#x1f197; idea 是否安装了lombok插件 --》&#x1f197; 貌似没有问题…

锐键网络文档链接

锐键网络文档 锐键网络官网锐捷网络官网首页锐捷网络-场景创新&#xff0c;驱动数字未来锐键网络锐键网络产品中心锐键网络产品中心https://www.ruijie.com.cn/cp/锐键网络交换机【锐捷交换机】以太网交换机_网络交换机-锐捷网络锐键网络无线企业无线产品|无线网络设备-无线AP-…

Redis基础二(spring整合redis)

Springboot整合Redis 一、Springboot整合redis ​ redis可以通过使用java代码来实现 第一部分文档中 在终端操作redis的所有命令&#xff0c;Spring已经帮我们封装了所有的操作&#xff0c;所以变得很简单了。 ​ Spring专门提供了一个模块来进行这些操作的封装&#xff0c;这…

文件路径、文件系统操作、字节流字符流、文件内容操作、自己实现文件查找 删除 复制、IO报错:拒绝访问

目录 一、什么是文件 文件的分类 文件路径 二、文件系统操作 四、文件内容操作 字节流字符流 1&#xff09;字节流&#xff08;二进制文件&#xff09; InputStream概述 FileInputStream 概述 OutputStream 概述 2&#xff09;字符流&#xff08;文本文件&#xf…

资料文档中心

华三文档中心 华三云计算文档中心各个方向(云计算 大数据 路由器 交换机 无线 物联网 安全 光模块 智能管理与运维 移动通信 服务器 存储 PON ICG信息通信 EPCN网关 License Server 其他产品 智能终端 传输产品 云简网络 商用终端 ALGC SMB 产品)云计算-云计算产品-云计算解决…

产品经理-需求分析

需求分析 1.什么是需求&#xff1f; 需求&#xff1a;其本质就是用户的预期&#xff0c;而预期与现状之间存在着差异&#xff0c;就出现了需求另外&#xff0c;用户提出需求时&#xff0c;都会基于某种目的所提出问题、建议或者想法 原始需求的目的是为了避免扯皮&#xff0c;…

基于Arduino的3D打印六足机器人

本项目是在原有项目基础上进行的改进&#xff0c;改进了六足机器人的姿态算法&#xff0c;使姿态在变化时更稳定 基于Arduino的3D打印六足机器人 一、项目说明二、所需配件三、3D打印四、机械腿部4.1腿部结构4.2腿部代码4.3 COPY腿部结构4.4伺服电机接线4.5 连接腿部结构 五、…

PD协议芯片ECP5701+充电管理芯片+升压芯片搭配应用TYPE-C口充电及升压供电系统

以往的电子设备需要有专门的电源适配器来供电&#xff0c;不仅需要大家区分不同设备的充电器&#xff0c;还要专门找地方来放置&#xff0c;还给用户带来了诸多不便。然而&#xff0c;TYPE-C接口&#xff0c;全称USB Type-C&#xff0c;迅速取代了传统的USB接口&#xff0c;成为…

【评测】湖北十堰大带宽300M高防云服务器

湖北十堰的高防服务器拥有高性能处理器、大容量DDR4 ECC内存、SSD硬盘及多种带宽配置&#xff0c;性价比高且配置灵活。它防御强劲&#xff0c;性能稳定可靠&#xff0c;扩展性佳&#xff0c;可满足各类企业需求&#xff0c;是优质服务器的绝佳选择。 清风云官网&#xff1a;ht…

【含文档】基于Springboot+Andriod的成人教育APP(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

如何正确输入IP地址前面的斜杠:详细指南

在网络配置和文档编写中&#xff0c;经常需要准确地输入IP地址及其子网掩码。IP地址前面的斜杠&#xff08;/&#xff09;用于表示子网掩码的位数&#xff0c;是一个重要的组成部分。然而&#xff0c;对于一些用户来说&#xff0c;输入这个斜杠可能会带来一些困惑。本文将详细介…