当前位置: 首页 > news >正文

leetcode 面试经典 150 题:轮转数组

链接轮转数组
题序号189
题型数组
解法1. 额外数组法,2. 原数组翻转法(三次翻转法)
难度中等
熟练度✅✅✅✅

题目

给定一个整数数组 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) 的 原地 算法解决这个问题吗?

题解

额外数组法

  1. 核心要点:遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+k) mod n 的位置,最后将新数组拷贝至原数组即可。
  2. 复杂度:时间复杂度O(n),空间复杂度O(n)。
  3. c++ 实现算法
class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();vector <int> newarr(n);for(int i = 0; i < n; i++ ) {newarr[(i+k)%n] = nums[i];}nums.assign(newarr.begin(), newarr.end());  }
};
  1. 算法推演

n=7,k=3
(0+3)%7=3 newarr[3] = nums[0] 1
(1+3)%7=4 newarr[4] = nums[1] 2
(2+3)%7=5 newarr[5] = nums[2] 3
(3+3)%7=6 newarr[6] = nums[3] 4
(4+3)%7=0 newarr[0] = nums[4] 5
(5+3)%7=1 newarr[1] = nums[5] 6
(6+3)%7=2 newarr[2] = nums[6] 7

原数组翻转法(三次翻转法)

  1. 核心要点:现将整个数组翻转,再将前 k 个数翻转,最后将剩下元素翻转。
  2. 复杂度:时间复杂度O(n),其中 n 为数组的长度。每个元素被翻转两次,一共 n 个元素,因此总时间复杂度为 O(2n)=O(n);空间复杂度O(1)。
  3. c++ 实现算法:翻转可以利用swap函数数组首尾交换实现。
class Solution2 {
public:void reverse(vector<int>& nums, int start, int end) {while (start < end) {swap(nums[start], nums[end]);start += 1;end -= 1;}}void rotate(vector<int>& nums, int k) {k %= nums.size(); //k=3%7=3,为了旋转不超过数组长度reverse(nums, 0, nums.size() - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.size() - 1);}
};
  1. 推演算法

推演:
输入数组:1 2 3 4 5 6 7
第一次翻转:7 6 5 4 3 2 1
第二次翻转:5 6 7 4 3 2 1
第三次翻转:5 6 7 1 2 3 4

c++ 完整demo

#include <iostream>
#include <vector>using namespace std;class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();vector <int> newarr(n);for(int i = 0; i < n; i++ ) {newarr[(i+k)%n] = nums[i];}nums.assign(newarr.begin(), newarr.end());  }
};
class Solution2 {
public:void reverse(vector<int>& nums, int start, int end) {while (start < end) {swap(nums[start], nums[end]);start += 1;end -= 1;}}void rotate(vector<int>& nums, int k) {k %= nums.size(); //k=3%7=3,为了旋转不超过数组长度reverse(nums, 0, nums.size() - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.size() - 1);}
};
int main() {vector <int> nums = {1, 2, 3, 4, 5, 6, 7};int k = 3;//Solution solution;Solution2 solution;solution.rotate(nums, k);for(int i = 0; i < nums.size(); i++) {cout << "nums[" << i << "]: " << nums[i] << endl;}return 0;
}

相关文章:

leetcode 面试经典 150 题:轮转数组

链接轮转数组题序号189题型数组解法1. 额外数组法&#xff0c;2. 原数组翻转法&#xff08;三次翻转法&#xff09;难度中等熟练度✅✅✅✅ 题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,…...

如何在 Mac 上轻松恢复语音备忘录

在 Mac 上丢失重要的语音备忘录可能会令人沮丧&#xff0c;但好消息是有多种方法可以恢复它们。无论您是意外删除它们还是由于系统故障而丢失&#xff0c;您都可以轻松地在 Mac 上恢复语音备忘录。 在本指南中&#xff0c;我们将探讨两种方法&#xff1a;在没有备份的情况下恢…...

C++ 基础概念: 未定义行为(Undefined Behavior)

文章目录 Intro如何正确认识 UB有多少未定义行为?对 UB 的误解 C 标准定义的几种行为1. 定义的行为 (defined behavior)2. 实现定义的行为 (implementation defined behavior)3. 未指定的行为 (unspecified behavior)4. 未定义行为 (undefined behavior)揭晓答案 C 中如何定义…...

Rad Studio 11.3 Alexandria 3236a(DELPHI 11.3)官方ISO/百度云盘 下载地址

Embarcadero很高兴地宣布RAD Studio 11 Alexandria Release 3的发布&#xff0c;也被称为RAD Studio 11.3&#xff0c;同时发布的还有Delphi 11.3和CBuilder 11.3。这个版本专注于质量和改进&#xff0c;建立在RAD Studio 11 Alexandria三个前版本的伟大的新功能上。 RAD Studi…...

vue3-watchEffect异步依赖收集

当 b 更新时 a 并不会更新&#xff0c;因为watchEffect的依赖收集在该案例中停止于await asyncFn()&#xff0c;也就是只会收集同步代码的依赖&#xff0c;await 之后的异步代码的依赖并不会收集到 <template> <div>a: {{ a }} <br>b: {{ b }} <br>&l…...

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别&#xff0c;并用表格进行对比。 核心概念&#xff1a; 页面 (Page)&#xff1a; 页面是微信小程序中用户可以直接交互的视图层&#xff0c;也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…...

【蓝桥杯】43709.机器人繁殖

题目描述 X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己&#xff0c;然后就失去复制能力。 每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说&#xff0c;如果 X 星系原有机器人 5 个&#xff0c;1 年后总数是&#xff1a;5 9 14&#xf…...

【机器学习】机器学习的基本分类-自监督学习(Self-supervised Learning)

自监督学习是一种机器学习方法&#xff0c;介于监督学习和无监督学习之间。它通过数据本身生成标签&#xff0c;创建训练任务&#xff0c;从而学习数据的表征&#xff0c;而不需要人工标注的标签。这种方法在减少标注数据依赖、提高模型通用性等方面具有重要意义。 自监督学习的…...

R shiny app | 网页应用 空格分隔的文本文件在线转csv

shiny 能快速把R程序以web app的形式提供出来&#xff0c;方便使用&#xff0c;降低技术使用门槛。 本文提供的示例&#xff1a;把空格分隔的txt文件转为逗号分隔的csv文件。 前置依赖&#xff1a;需要有R环境(v4.2.0)&#xff0c;安装shiny包(v1.9.1)。括号内是我使用的版本…...

三天速成微服务

微服务技术栈 总结 微服务技术对比 技术栈 SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud Springboot和SpringCould兼容性 代码目录结构如下 用于远程调用Bean 代码 package cn.itcast.order.config;//import …...

【踩坑记录】uni-app 微信小程序调试不更新问题解决指南

uni-app 微信小程序调试不更新问题解决指南 在使用 uni-app 开发微信小程序时&#xff0c;可能会遇到代码修改后无法更新或者不生效的问题。这种现象常见于调试阶段&#xff0c;通常与缓存、编译或代码错误有关。 本文将详细分析调试过程中常见的“不更新”问题&#xff0c;并…...

【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事?

【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事&#xff1f; 【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事&#xff1f; 文章目录 【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事&…...

PyTorch 中 coalesce() 函数详解与应用示例

PyTorch 中 coalesce() 函数详解与应用示例 coalesce&#xff1a; 美 [ˌkoʊəˈlɛs] 合并&#xff1b;凝聚&#xff1b;联结&#xff0c;注意发音 引言 在 PyTorch 中&#xff0c;稀疏张量&#xff08;Sparse Tensor&#xff09;是一种高效存储和操作稀疏数据的方式。稀疏…...

ubuntu进行C++的调试

方法一&#xff1a;gdb调试 作用: GDB 是 GNU 调试器&#xff0c;用于调试 C/C 程序。它可以在命令行中使用&#xff0c;提供强大的调试功能。 集成: GDB 可以独立于 VSCode 使用&#xff0c;你可以在终端中直接运行 GDB 来调试程序。 使用示例:编译程序时使用 -g 选项以包含调…...

【U8+】用友U8软件中,出入库流水输出excel的时候提示报表输出引擎错误。

【问题现象】 通过天联高级版客户端登录拥有U8后&#xff0c; 将出入库流水输出excel的时候&#xff0c;提示报表输出引擎错误。 进行报表输出时出现错误&#xff0c;错误信息&#xff1a;找不到“fd6eea8b-fb40-4ce4-8ab4-cddbd9462981.htm”。 如果您正试图从最近使用的文件列…...

NoSQL简介

NoSQL 的定义及特点 NoSQL&#xff08;Not Only SQL&#xff09;是一种非关系型数据库&#xff0c;设计之初为解决关系型数据库在扩展性、性能和多样化数据处理方面的局限性。NoSQL 支持多种数据模型&#xff0c;包括键值对、文档、列族和图形结构&#xff0c;广泛应用于大规模…...

XIAO Esp32 S3 网络摄像头——3音视频监控

1、介绍 之前分别介绍了音频和视频的接收,本文是整合了前2篇文章,实现了音视频的同时获取。 效果: 用xiao esp35 s3自制一个网络摄像头 2、适用场景广泛 家庭安防 无论是门前监控,还是室内安全,自制摄像头可以让你轻松把握每个角落,实时查看视频流,防止任何潜在风险。…...

题目解析与代码实现:You‘re Given a String

引言 本文将详细解读一道字符串处理题目 “You’re Given a String”&#xff0c;并用 Python 实现该题的解决方案&#xff0c;同时解析其核心算法逻辑。本文适合有一定基础的程序员&#xff0c;希望通过字符串算法提升能力的读者。 1. 题目描述 问题背景 题目给出了一个字符…...

Understanding the Lomb–Scargle Periodogram

本文目的&#xff1a;了解Lomb–Scargle Periodogram的原理 &#xff08;用来估算不均匀采样数据的周期&#xff09;参考文献Understanding the Lomb–Scargle Periodogram思路&#xff1a; 连续傅里叶变换 --> 离散傅里叶变换&#xff08;均匀采样–> Classifical perio…...

解决Linux切换用户后的命令提示符为-bashxx$的问题

1、问题描述 切换用户时&#xff0c;命令提示符为-bashxx$ 比如&#xff1a; [rootlocalhost ~]# su zhouxingchi bash-4.2$ ### 显示看着不正常的命令提示符 2、PS1变量 PS1变量就是我们的命令提示符的内容&#xff0c;当我们登录时会加载该变量&#xff0c;从而显示提…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...