10.轮转数组

文章目录

  • 题目简介
  • 题目解答
    • 解法一:使用额外的数组
      • 代码:
      • 复杂度分析:
    • 解法二:数组反转
      • 代码:
      • 复杂度分析:
  • 题目链接

大家好,我是晓星航。今天为大家带来的是 轮转数组 相关的讲解!😀

题目简介

题目解答

解法一:使用额外的数组

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

代码:

class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        int[] newArr = new int[n];
        for (int i = 0; i < n; ++i) {
            newArr[(i + k) % n] = nums[i];
        }
        System.arraycopy(newArr, 0, nums, 0, n);
    }
}

这里直接从反转位置开始填入数组元素,可以形象理解为我们把起点改变为了i+k,然后我们在把数组后面填满后再从下标为0的位置开始继续填充元素。(i+k)%n的意义即使在nums数组后面填满后,然后从第一个位置继续填充。
在这里插入图片描述
这里方法的含义是:我们从数组newArr的0下标开始,复制到nums数组从0下标开始,复制n个元素。
在这里插入图片描述

复杂度分析:

时间复杂度: O(n),其中 n 为数组的长度。

空间复杂度: O(n)。


解法二:数组反转

思路:我们直接拿官方的图解就可以很轻易地看出思路
在这里插入图片描述

代码:

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

一个很简单的反转数组全部元素的代码:
在这里插入图片描述
这里k模数组长度的作用就是为了避免要轮转的元素个数比数组本身还大,既然轮转一周等于没有轮转,因此我们采取这个方法避免数组越界的问题。
在这里插入图片描述
这三次轮转的作用也很好解释,第一次先把数组整个反转。第二次将前半段反转,第三次将后半段反转,这样就符合题意了,数组是由两个递增数组组合而成。
在这里插入图片描述

复杂度分析:

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

空间复杂度:O(1)。

题目链接

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于VOLOPV2的自动驾驶环境感知系统

基于VOLOPV2的自动驾驶环境感知系统是一个复杂的系统&#xff0c;它主要负责实时检测并识别周围环境中的各种物体和信息&#xff0c;为自动驾驶车辆提供必要的感知数据。以下是对该系统的一个简要介绍&#xff1a; 环境感知是自动驾驶系统中的一个关键部分&#xff0c;它依赖于…

SQL的命令

目录 创建用户 ​编辑 DDL数据库操作 查询 创建 使用 删除 创建数据库表 在表中修改字段 查询表 DML 添加数据 修改 删除 DQL 查询 创建用户 DDL数据库操作 查询 show databases; 创建 权限问题导致无法创建&#xff0c;连接root修改用户权限 CREATE DATABAS…

AJAX概述和基本使用

01 【AJAX概述和基本使用】 1.AJAX简介 AJAX 全称为Asynchronous JavaScript And XML&#xff0c;就是异步的JS 和XML 通过AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据 AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准…

Java入门基础学习笔记8——注释

1、注释&#xff1a; 注释是写在程序中对代码进行解释说明的文件&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。 package cn.ensource.note;/**文档注释文档注释 */ public class NoteDemo {public static void main(String[] args) {// 单行注释System.out.…

数字人金融应用技术指南

根据《北京金融科技产业联盟团体标准管理办法》的规定&#xff0c;2024年3月27日经北京金融科技产业联盟第三届理事会第二次会议审议&#xff0c;批准发布《数字人金融应用技术指南》&#xff08;T/BFIA 027—2024&#xff09;、《图数据库金融应用技术要求》&#xff08;T/BFI…

如何在两个日期之间获取日志属性

如果你们想在两个日期之间获取日志属性&#xff0c;需要首先明确你所指的“日志属性”。如果你是指在两个日期之间获取日志&#xff08;例如文本日志文件&#xff09;中的记录&#xff0c;你可以使用 Python 的文件操作来读取日志文件&#xff0c;并根据每行记录中的日期属性进…

【35分钟掌握金融风控策略18】贷前风控策略详解-3

目录 ​编辑 贷前风控数据源 第三方数据 贷前风控数据源 第三方数据 在金融风控过程中&#xff0c;金融机构通常会引入一些第三方的风控数据&#xff08;或第三方金融技术&#xff09;来辅助识别贷款个人或贷款企业的风险状况&#xff0c;帮助金融机构进行风控决策&#x…

政务网离线安装python3及其依赖手册

文章目录 python安装及环境配置gcc安装make安装python3安装pip安装 测试测试python3报错:ModuleNotFoundError: No module named _ctypes’测试pip3报错“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.” 依赖库…

Android 如何启用user版本的adb源码分析

通过adb shell中执行getprop persist.sys.usb.config&#xff0c;可以看到系统usb的相关选项&#xff0c;persist.sys.usb.config显示的就是当前系统关于usb选项的系统配置【RK3188Android4.4刚移植的例子】: 全编脚本中make命令会调用build/core/main.mk,在里面可以看到一段…

AWTK 开源串口屏开发(18) - 用 C 语言自定义命令

AWTK-HMI 内置了不少模型&#xff0c;利用这些模型开发应用程序&#xff0c;不需要编写代码即可实现常见的应用。但是&#xff0c;有时候我们需要自定义一些命令&#xff0c;以实现一些特殊的功能。 本文档介绍如何使用 C 语言自定义命令。 1. 实现 hmi_model_cmd_t 接口 1.1…

服务丢在tomcat中启动war包,需要在tomcat中配置Java环境吗?

一般来说&#xff0c;部署在 Tomcat 上的 WAR 包启动时不需要在 Tomcat 中单独配置 Java 环境&#xff0c;因为 Tomcat 启动本身就需要依赖 Java 环境。以下是确保 Tomcat 正常运行与部署 WAR 包的基本步骤&#xff1a; 安装 Java 环境&#xff1a; 首先&#xff0c;确保你的系…

实现WPF中的数据更新 属性通知界面:INotifyPropertyChanged接口

在WPF (Windows Presentation Foundation) 应用程序中&#xff0c;当数据发生变化时&#xff0c;通常希望UI能够自动更新以反映这些变化。为了实现这一功能&#xff0c;WPF 提供了数据绑定机制&#xff0c;并且配合 INotifyPropertyChanged 接口使用&#xff0c;可以在数据模型…

打开IE浏览器自动跳转微软的edge浏览器,取消自动跳转

打开IE浏览器会自动跳转微软的edge浏览器 不想跳转的解决办法 1.Win Q 输入 Internet&#xff0c;点击Internet 选项 2.去掉勾选 启用第三方浏览器扩展&#xff0c;然后就不自动跳转了 3. 完成

每日OJ题_贪心算法四②_力扣435. 无重叠区间

目录 力扣435. 无重叠区间 解析代码 力扣435. 无重叠区间 435. 无重叠区间 难度 中等 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2]…

代码无界,创新无限!华为云开发者日 · 广州站来了!

5月23日&#xff0c;2024年首场华为云开发者日HDC.Cloud Day将在广州盛大举行。这场技术派对将为开发者们带来一场无与伦比的技术盛宴。在这里&#xff0c;开发者们将有机会现场聆听行业专家的精彩分享&#xff0c;深度了解众多前沿产品的最新技术和功能&#xff0c;并与行业专…

PHP 提取数组中的特定的值

需求&#xff1a; 前端展示&#xff1a; &#xff08;1&#xff09;之前的页面&#xff1a; &#xff08;2&#xff09;修改后的页面&#xff1a; 之前接口返回的数据 &#xff1a; 解决办法&#xff1a;提取tags 中的 ’约 的数组 添加到一个新的数组中去 1&#xff1a;一开…

OKHTTP 3.12.0 以后版本 headers 中不可携带中文

今天遇到的报错&#xff1a; java.lang.llegalArgumentException: Unexpected char 0x957f at 0 in x-brand value: 电视堆栈 okhttp3.Headers.checkValue(Headers.java:272) okhttp3.Headers$Builder.add(Headers.java:312) okhttp3.Request$Builder.addHeader(Request.iava:…

三下乡社会实践投稿攻略在这里

在当今信息爆炸的时代&#xff0c;如何让自己的声音被更多人听到&#xff0c;成为许多人和企业所关心的问题。其中&#xff0c;向各大媒体网站投稿&#xff0c;成为了一种常见的宣传方式。但是&#xff0c;如何投稿各大媒体网站&#xff1f;新闻媒体发文策略又有哪些呢&#xf…

【数据结构】第五讲:栈和队列

个人主页&#xff1a;深情秋刀鱼-CSDN博客 数据结构专栏&#xff1a;数据结构与算法 源码获取&#xff1a;数据结构: 上传我写的关于数据结构的代码 (gitee.com) 目录 一、栈 1.栈的定义 2.栈的实现 a.栈结构的定义 b.初始化 c.扩容 d.入栈 e.出栈 f.打印 g.取栈顶元素…

解双曲型非线性方程的Harden-Yee算法(TVD格式)

解双曲型非线性方程的TVD格式Harden-Yee算法 算法如图 该算法可以很好地压制震荡&#xff0c;并且耗散很小。具体算法如图所示 import matplotlib import math matplotlib.use(TkAgg) import numpy as np import matplotlib.pyplot as plt def Phiy(yy,epsi):#phi(y)if a…