Leetcode189--旋转数组

双像素传感器的AI计算摄影实战:单目深度估计与图像去模糊的融合创新 本文介绍了双像素传感器技术在计算机视觉中的应用,包括深度估计、图像去模糊和图像重建等任务。双像素传感器通过两个子单元捕捉视差信息,使摄像头能够分析场景的三维结构和运动轨迹。文章以图像去模糊为例,详细展示了从数据准备到模型训练的完整流程,包括构建自定义数据集、设计双像素特征提取模块、训练去模糊模型及推理测试。通过模拟双像素的"双视角"信息融合,该AI算法能有效恢复模糊图像的清晰细节。 阅读详情

Leetcode189–旋转数组(多种方法解题,python)

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

编程语言:python

作者:黑暗主宰

邮箱:shengzhanhe@gmail.com

Leetcode189–旋转数组

题目描述

原题链接:

​ https://leetcode-cn.com/problems/rotate-array/ (中文)

​ https://leetcode.com/problems/rotate-array/ (英文)

题目描述:

​ 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例1:
  输入: [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:
  输入: [-1,-100,3,99] 和 k = 2
  输出: [3,99,-1,-100]
  解释:
  向右旋转 1 步: [99,-1,-100,3]
  向右旋转 2 步: [3,99,-1,-100]

说明:

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

解题思路

方法1:暴力求解

使用循环的方式,循环 k k k,每次循环调整数组中元素的位置 O ( n ) O(n) O(n)

def rotate1(nums, k):
    length = len(nums)
	for i in range(k):
    	tmp = nums[-1]
    	for j in range(length-1):
        	nums[-1-j] = nums[-2-j]
    nums[0] = tmp

官方提供的暴力求解使用的是java,转换为python

def rotate2(nums, k):
    length = len(nums)
    for i in range(k):
		last = nums[-1]
		for j in range(length):
            tmp = nums[j]
            nums[j] = last
            last = tmp

方法2:使用环状替换

官方的解释1,第一次读可能有点绕,仔细读一下,对照着源码和下图,很容易就知道怎么回事了。

解释一个具体的例子:如下图 nums = [1,2,3,4,5,6], k = 2;

设 n u m s nums nums 的长度为要知道 k = n k=n k=n 时,就相当于循环于 n u m s nums nums 没有旋转,所以要把 k k k 限制到 0 ≤ k < n 0 \le k < n 0≤k<n , 即 k = k % n,因为要原地修改数组,所以要建立一个 t m p tmp tmp 变量来缓存数据。使用环状替换,每一次循环,数组中的元素都能直接到最终的位置。使用这种方法,我们要知道要从哪里开始移动,哪里停止。使用环形方法,每一次循环会移动 n k \frac{n}{k} kn​ 个元素,要完成数组的翻转,每个元素都要调整位置,即需要调整 n n n 次,所以我们要从原始下标为 0 0 0 的地方开始,一直到 k − 1 k-1 k−1,共循环 k k k 轮,每次移动 n k \frac{n}{k} kn​ 个元素,所以 n k × k = n \frac{n}{k} \times k = n kn​×k=n。结合下文python源码更容易理解。

img
代码如下:

def totate(nums, k):
    length = len(nums)
    k = k % length

    count = 0
    start = 0

    while count < length:
        cur = start
        prev = nums[start]

        while True:
            next_index = (cur + k) % length
            tmp = nums[next_index]
            nums[next_index] = prev
            prev = tmp
            cur = next_index
            count += 1
            if cur == start:
                break
	 start += 1

方法3:使用python切片操作

def rotate1(nums, k):
    for i in range(k):
        '''
        tmp = nums[-1]
        nums[1:] = nums[:-1]
        nums[0] = tmp
        '''
       	nums[1:], nums[0] = nums[0:-1], nums[-1]
def rotate2(nums, k):
	length = len(nums)
	step = k % length
	nums[:] = nums[length-step:] + nums[:length]

方法4:使用python内置函数

使用pop删除数组的最后一个元素,然后使用insert函数把元素插入到首位置

def rotate(nums, k):
    for i in range(k):
		last = nums.pop()
		nums.insert(0, last)

方法5:增加空间复杂度(可以实现功能,但不符合题意)

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

def rotate(nums, k):
	length = len(nums)
    k = k % length
    # 使用新的列表来存储原来列表的元素,这里使用的是切片的方式 浅copy
    new_nums = nums[:]
    for i in range(k):
        nums[i] = new_nums[length-k+i]

	for j in range(k, length):
		nums[j] = new_nums[j-k]

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分析技术问题,我们一起学习进步
在这里插入图片描述

注: 文中有写错的地方,欢迎大家不吝指正!!!


  1. https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/ ↩︎

OpenOCD入门到精通:第 0 章 教程导读 摘要:本教程是OpenOCD嵌入式调试工具的完整指南,适合从新手到资深工程师的学习需求。内容涵盖基础配置、调试技巧、Flash编程、TCL脚本自动化、源码解析和二次开发,共8大部分30章。教程提供5种学习路线,可根据角色和目标灵活选择,配套资源包含示例代码和配置文件。通过系统学习,读者将掌握OpenOCD从使用到扩展的全套技能,成为嵌入式调试领域的专家。 阅读详情

相关推荐

新手避坑指南:在MacBook上为PyTorch正确配置MPS环境,跑通第一个YOLOv8训练

本文详细指导新手如何在MacBook上为PyTorch正确配置MPS环境,并成功运行YOLOv8训练。从环境准备、PyTorch安装到YOLOv8配置和性能调优,提供全面的避坑指南和实用技巧,帮助开发者充分利用Mac的GPU加速能力。

weixin_29100399的博客 226

LeetCode 189. 轮转数组

leetcode 189. 轮转数组

Edison's 小宇宙 1万+

基于51单片机的多功能计算器全套设计

当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且人脑比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器设计开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。 本设计是以STC89C52单片机为核心的计算器模拟系统设计,输入采用5×8矩阵键盘,可以进行加、减、乘、除等十几种数字运算,同时支持括号

runweipa的博客 1742

LeetCode.189(轮转数组)

因为数组每旋转7次,数组中的元素就回到不旋转的位置,所以,即使在输入旋转次数为77次时,得到的效果也和旋转一次一样。上面的代码,只能实现右移一位。对于移动多个元素,可以将上面移动一个元素的过程用循环来进行。的值过大时,因为每右旋7次就是一个循环,所以,为了减少编译器的工作量,用。整体代码的逻辑为: n是数组中元素的个数,k是执行右旋的次数。第一步:先将数组种最后一位元素,即:7,用一个临时变量保存。第三步: 把临时变量保存的7,放到数组的首元素的位置。第二步:将右半部分元素整体逆序,即:把下标为。

2301_76836325的博客 682

ZYNQ Linux 应用层 利用 AXI DMA 进行数据传输

ZYNQ Linux应用层 利用 AXI DMA 进行数据传输 软件版本: VIVADO2018.2 操作系统: Debian 9 硬件平台: ZYNQ-MZ7100FA 嵌入式操作系统:Debian(4.19.0-xilinx) AXI-DMA驱动:GitHub:bperez77/xilinx_axidma 一、搭建硬件环境 参见:《ZYNQ 修炼秘籍裸机篇 2019 版》第21章:CH21 利用 AXI DMA 进行批量数据环路测试 参考文章: ZYNQ跑系统 系列(四) AXI-DMA的linux下运

jin787730090的博客 1万+

Python解析骑行fit文件:从数据缺失到完整记录

本文详细介绍了如何利用Python解析和处理骑行FIT文件,解决数据缺失问题。通过使用fitparse库读取二进制FIT文件,并结合Garmin FitCSVTool进行格式转换,指导读者一步步诊断数据完整性、设计心率修补方案,并最终生成完整的骑行记录文件。该方法为骑行爱好者提供了灵活的数据修复与自定义分析能力。

weixin_29062255的博客 456

LeetCode 189.轮转数组(三种方法解决)

三段逆置>空间换时间>暴力求解。评判哪个方法为最优解,一般是关注该方法运行时的时间复杂度。时间复杂度低,算法计算时间越快,则为做优算法。对于空间换时间的方法,虽然运行消耗内存增加,但一般不太会关注消耗内存的多少,现在随着技术发展的越来越快,对于内存的成本控制的也越开越低。所以用空间换时间,还是划算的。

QZW的博客 2304

【知识分享】IBIS 建模指南 04

文章详细阐述了将缓冲器数据转换为IBIS模型格式的核心步骤与规范要求。主要内容包括:1)IBIS文件三大结构(文件头信息、组件引脚映射、缓冲器行为描述)及其关键词定义;2)四种关键I-V表(上下拉、电源/地钳位)的数据处理规则,强调需避免重复计算效应;3)切换特性描述方法,指出V-T波形表优于Ramp数据的三大优势;4)差分缓冲器通过[DiffPin]关键词实现建模的特殊流程。文中特别强调数据外推校验、参考电压基准转换、工艺角数据排序等易错环节的处理技巧,为创建符合IBIS 4.0规范的精确模型提供指导。

一只豌豆象的博客 2049

LeetCode 189. 旋转数组(环形替换)

1. 题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [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] 要求使用空间复杂度为 O(1) 的 原地...

Michael是个半路程序员 1444

14003.xilinx系统移植

文章目录1 xilinx 系统移植 sd卡版本1.1 创建项目1.2 拷贝 *.hdf 到工程目录1.3 根据hdf文件对系统进行配置1.3.1 设置内核源码路径为本地1.3.2 设置分区的名称与大小1.4 清除本地缓存并编译成功1.5 打包生成BOOT.BIN并拷贝到sd卡1.6 问题1.7 系统启动成功1.8 配置设备树文件丰富系统外设 1 xilinx 系统移植 sd卡版本 芯片型号 ZYNQ UltraScale+ XAZU2EG ,对应厂家提供的demo板为 zu102或zu104 1.1 创建

写给自己的笔记 481

【PowerBI专栏】PowerBI导入MYSQL数据库

本文介绍了在PowerBI中连接MySQL数据库的方法。首先需要下载并安装MySQL官方.NET连接驱动(推荐8.4.0版本),安装完成后重启PowerBI。连接时需填写服务器IP和数据库名称等必填参数。文章详细说明了连接配置步骤,包括账户设置、数据表选择以及可能遇到的数据格式转换问题处理。最后指导用户完成数据清洗后进入PowerPivot进行后续计算。特别提醒最新9.4版本可能存在兼容性问题,建议使用稳定的8.4版本连接器。

技术与管理的平衡木- 689

leetcode第189题. 旋转数组----五种解法

目录189. 旋转数组解法一:暴力求解(依次旋转K轮)解法二:额外空间法解法三:三次翻转解法四:环状替换 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗? 示例 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,

Zhou000815的博客 4300

利用Dify构建文档内容的分析对比

本次主要做了一些workflow和Agent的应用实现,供大家参考。主要目的是为了进行两个内部报告文件的内容对比,特别是报告中的各类审批表、申请表、推荐表和流程对比,本地数据通过知识库方式分别加载到两个知识库中,编制工作流针对同一个问题进行知识库检索,之后将查询结果进行合并,再一起提交给LLM进行对比,最终将对比分析结果以markdown方式返回显示。主要包括如何构建知识库,如何设计workflow、如何将工作流发布为工具、如何设计提示词、如何在agent中引入前面发布的工具,最终通过agent实现与用户交

hhue2007的专栏 2522

力扣【LeetCode】—— 189. 旋转数组【java】

题目链接:https://leetcode-cn.com/problems/rotate-array/ 题目:  给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例:  [1,2,3,4,5,6,7] 和 k = 3 结果:  [5,6,7,1,2,3,4] 说明:  尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。  要求使用空间复杂度为 O(1) 的 原地 算法。 方案一:暴力 该解决方案虽然满足题意中的空间复杂度条件,但是时间复杂度为O(k*n),pub

眉头的骰 871

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

力扣189.旋转数组

力扣189.旋转数组解法一解法二解法三 三种解法,解法一很容易想到,后两种解法比较巧妙,在这里记录一下。 解法一 每次将数组每一位向后挪动一位,挪动k%nums.length次(k%nums.length是因为挪动nums.length的倍数次相当于没有挪动) //时间复杂度:O(kn) //空间复杂度:O(1) class Solution { public void rotate(in...

不想秃头的女ITer的博客 746

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

力扣189.旋转数组 C语言

力扣189 旋转数组 个人感觉挺不错的一道题,而且大公司面试也会出现这样的题 题目分析: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [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...

weixin_44347111的博客 574

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode 189. 旋转数组 C++

Leetcode 189. 旋转数组 题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 测试样例 示例 1: 输入: [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: 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释:

weixin_43750513的博客 288

Leetcode 189. 旋转数组

Leetcode 189. 旋转数组 题目描述 给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 示例 1: 输入: [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] ...

qq_28640193的博客 355

Leetcode189. 旋转数组

Leetcode189. 旋转数组 题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [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] 题解: 方案...

会流泪de鱼的博客 302

LeetCode第189题_旋转数组

给你一个数组,将数组中的元素向右轮转k个位置,其中k是非负数。

qq_40263592的博客 1721

LeetCode--189 旋转数组

题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 (说明: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 要求使用空间复杂度为 O(1) 的原地算法。) 示例 输入: [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,...

Courage-Hu的专栏 173

LeetCode 力扣 189. 旋转数组 字符串

大家觉得写还可以,可以点赞、收藏、关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录189. 旋转数组示例 1:示例 2:说明:分析提交结果 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [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

motongxue的博客 248

力扣leetcode 189. 旋转数组 java

class Solution { public void reverse(int[] arr, int i, int j) { while(i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; ...

izhxxx的博客 245

leetcode 189.旋转数组

leetcode 189.旋转数组 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [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:...

EngineerHe的博客 605

leetcode 189. 旋转数组

leetcode 189. 旋转数组189. 旋转数组1. 题目描述2. 解题思路 189. 旋转数组 难度:简单 题库地址:https://leetcode-cn.com/problems/rotate-array/ 1. 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7...

王晓安 404

189. 旋转数组——来源力扣 (LeetCode)

给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 示例 1: 输入: [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] 方法 1:暴力(例1就是旋转三次) 最简单的方法是...

方法属性类,一个都不会 195
上一篇: Leetcode344--翻转字符串
下一篇: Leetcode217--存在重复元素
黑暗主宰
博客等级 码龄9年 72粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值