Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcode 189. 旋转数组

Leetcode 189. 旋转数组

作者头像
zhipingChen
发布于 2019-11-20 13:35:14
发布于 2019-11-20 13:35:14
32100
代码可运行
举报
文章被收录于专栏:编程理解编程理解
运行总次数:0
代码可运行

题目描述

给定一个数组,将数组中的元素向右移动 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) 的 原地 算法。

解法

由题目可知,若移动位数为 k,则表示将最后 k 位数字移动到数组前端,不妨以 l 表示数组长度,则数组中前 l-k 位数字向后移动 k 位。

不妨将最后 k 位数字中每一位下标为 i 的数字与下标为 i-k 的数字进行替换,不断减小 i 的值进行替换,若 l%k==0 则表示刚好能够全部替换完成;否则表示长度为 k 的数组,需要移动 k-(l%k) 位数字,递归该过程,直到刚好全部替换完成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        k=k%len(nums)
        if not k:
            return
        def rot(end,gap):
            i=end
            while i>=gap:
                nums[i],nums[i-gap]=nums[i-gap],nums[i]
                i-=1
            left=(end+1)%gap
            if left:
                rot(i,gap-left)
        rot(len(nums)-1,k)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
pt-osc在线重建表导致死锁的分析及对应的优化方案
在业务低峰通过pt-osc在线做DDL期间出现死锁,导致业务的SQL被回滚了,对应用不友好。 本案例死锁发生的场景:pt-osc拷贝最后一个chunk-size并且期间其它事务有对原表做insert操作,才会出现本案例的死锁。
老叶茶馆
2020/06/24
1.7K0
两万字详解!InnoDB锁专题!
大家好,我是捡田螺的小男孩。本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。
捡田螺的小男孩
2022/05/23
1.1K0
两万字详解!InnoDB锁专题!
浅析MySQL存储引擎序列属性
墨墨导读:为了达到标识的目的,许多应用程序需要生成唯一编号,比如:商品编号、交易流水号等。MySQL数据库同样能够支持这样的需求场景,AUTO_INCREMENT就是为MySQL实现序列的方式,它会自动生成序列编号。
数据和云
2020/09/14
1.7K0
年薪50万的DBA必须了解的MySQL锁和事务
锁是数据库系统区别于文件系统的一个关键特性。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。例如:操作缓冲池中的 LRU 列表,删除、添加、移动 LUR 列表中的元素。
Python数据科学
2019/08/28
7440
年薪50万的DBA必须了解的MySQL锁和事务
MYSQL RR隔离级别下MVCC及锁解读
MVCC(Multi-Version Concurrent Control):多版本并发控制,只作用于RC和RR隔离级别,主要是为了避免脏读、非重复读,而非幻读,很多文章说通过MVCC避免幻读,其实这
MySQL轻松学
2018/03/09
3.3K0
MYSQL RR隔离级别下MVCC及锁解读
自增主键不连续的几种情况
最近在极客时间上学习丁奇大佬的《MySQL 45讲》,这里结合自己的理解分享出来,喜欢的同学可以购买原版课程进行学习,里面的内容很丰富。
AsiaYe
2020/05/27
3.6K0
insert 语句加锁机制
之前的文章里面总结了很多死锁案例,其实里面有几篇文章对于insert加锁流程表述的不准确,而且微信公众号又无法修改,所以通过本文重新梳理insert加锁流程,最后加上一个死锁案例解析。
用户1278550
2018/08/09
3.3K0
第15章_锁
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
2640
第15章_锁
InnoDB锁机制
1. 锁类型 锁是数据库区别与文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。 InnoDB使用的锁类型,分别有: 共享锁(S)和排他锁(X) 意向锁(IS和IX) 自增长锁(AUTO-INC Locks) 1.1. 共享锁和排他锁 InnoDB实现了两种标准的行级锁:共享锁(S)和排他锁(X) 共享锁:允许持有该锁的事务读取行记录。如果事务 T1 拥有记录 r 的 S 锁,事务 T2 对记录 r 加锁请求:若想要加 S 锁,能马上获得;若想要获得 X 锁,则请求会阻塞。 排他锁:允许持有该锁
butterfly100
2018/04/16
1.7K0
InnoDB锁机制
MySQL 各种SQL语句加锁分析
Locking read( SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),UPDATE以及DELETE语句通常会对通过索引扫描的记录加上 next-key locks ,忽略没有用到索引的那部分where语句。
用户1278550
2018/08/09
2.2K0
MySQL重大Bug!自增主键竟然不是连续递增
AUTO_INCREMENT=2,表示下一次插入数据时,若需要自动生成自增值,会生成id=2。
JavaEdge
2021/10/18
2.9K0
insert唯一键冲突的加锁情况分析
今天分享的内容是MySQL里面insert语句在发生冲突的时候加锁情况,废话就不多说了,直接从例子开始吧。
AsiaYe
2020/06/12
2.6K1
mysql 主键自增语句_MySQL 自增主键[通俗易懂]
每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除。
全栈程序员站长
2022/07/18
13K0
MySQL锁(深入浅出)
为了解决多个进程访问内存或磁盘中的同一份数据造成的冲突,通常有两种解决方案,一种是多版本;另一种就是锁。MySQL作为一种关系型数据库,其实也是通过这两种方式来解决数据访问冲突的。MySQL数据多版本叫MVCC,同时MySQL使用了各种类型的锁来保证数据一致性。
一行舟
2022/08/25
4980
MySQL的锁机制_线程安全与锁机制
数据库使用锁是为了支持对共享资源的并发访问,同时保证数据的完整性和一致性。其中,MySQL在Server层和InnoDB引擎设计了多种类型的锁机制,用于实现不同场景下的并发控制,下面我们分析一下这些锁的定义和使用场景。
全栈程序员站长
2022/11/11
7580
MySQL的锁机制_线程安全与锁机制
IGNORE,REPLACE,ON DUPLICATE KEY UPDATE在避免重复插入记录时存在的问题及最佳实践
在实际业务场景中,经常会有这样的需求:插入一条记录,如果数据表中已经存在该条记录则更新它的部分字段,比如更新update_time或者在某些列上执行累加操作等。参考博客1中介绍了三种在MySQL中避免重复插入记录的方法,本文将在简单介绍这三种用法的基础上,深入分析这其各自存在的问题,最后给出在实际生产环境中对该业务场景的最佳实践。
saintyyu
2021/11/22
2.8K1
IGNORE,REPLACE,ON DUPLICATE KEY UPDATE在避免重复插入记录时存在的问题及最佳实践
MySQL实战第三十九讲-自增主键为什么不是连续的?
在 第4篇 文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。
越陌度阡
2022/11/27
1.1K0
MySQL实战第三十九讲-自增主键为什么不是连续的?
数据库锁的12连问,抗住!
同理,对于MySQL数据库来说的话,一般的对象都是一个事务一个事务来说的。所以,如果一个事务内,一个SQL正在更新某条记录,我们肯定不想它被别的事务影响到嘛?因此,数据库设计大叔,给该行数据加上锁(行锁)。
捡田螺的小男孩
2023/02/22
8520
数据库锁的12连问,抗住!
MySQL字段自增长AUTO_INCREMENT用法实例详解
之前有碰到过开发同事指出一张InnoDB表的自增列 AUTO_INCREMENT 值莫明的变大,由于这张表是通过MySQLdump导出导入的。
星哥玩云
2022/08/17
5.6K0
8000字长文,MySQL中的锁机制解密
MySQL,作为最流行的开源关系数据库管理系统之一,被广泛应用于各种应用程序和网站。
windealli
2024/03/11
5890
8000字长文,MySQL中的锁机制解密
相关推荐
pt-osc在线重建表导致死锁的分析及对应的优化方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验