deque的rotate方法
deque对象支持旋转操作,可以将元素向左或向右循环移动。
例如:
from collections import deque
dq = deque([1, 2, 3, 4])
dq.rotate(1)
执行后dq变为:
[4, 1, 2, 3]
元素向右移动了一位,最后一个元素到了最前面。
在这个问题中,我们有一个n*n的矩阵,利用deque来表示,旋转操作可以使列循环移动:
原矩阵:
[[1, 2, 3]
[4, 5, 6]]
旋转后:
[[3, 1, 2]
[6, 4, 5]]
第0列移动到最后,第2列移动到最前。
通过n次旋转,我们可以得到矩阵每种列排列顺序。
这样在每次旋转中计算対角线元素和,最终得到最大值。
所以这个rotate操作实现了按列的循环移位。
利用这个操作,结合记录最大对角线和,我们可以高效解决这个问题。
在deque的rotate方法中,正数表示向右旋转,负数表示向左旋转。
from collections import deque
dq = deque([1, 2, 3, 4])
向右旋转(rotate正数):
dq.rotate(1) # [4, 1, 2, 3]
dq.rotate(2) # [3, 4, 1, 2]
元素向右移动,最后一个元素moviel到最前面。
向左旋转(rotate负数):
dq.rotate(-1) # [2, 3, 4, 1]
dq.rotate(-2) # [3, 4, 1, 2]
元素向左移动,第一个元素moviel到最后面。
也就是:
正数表示向右循环旋转
负数表示向左循环旋转
在这个问题中,我们可以通过正数旋转实现按列循环移位,负数旋转实现按行循环移位。
那么向右/左旋转有什么不同呢?
向右旋转每次移动列
向左旋转每次移动行
旋转方向改变了移动的轴(列/行),但求最大对角线元素之和的逻辑是相同的。
例题(蓝桥杯3961题)求矩阵对角线最值
from collections import deque # 需要用到 deque 的 rotate(旋转) 方法
"""
示例: dq = deque([1, 5, 3, 9])
dq.rotate(1) 表示向右旋转 1 个单位
旋转后: [9, 1, 5, 3] 1 5 3 会右移 1 个单位, 而最后的元素 9 会被右移至第一位(因为右边没位置了,
所以会顶替第一个位置)
在问题的示例中,[
[7, 8, 9],
[4, 5, 7],
[1, 2, 3]]
向右旋转 1 位为:[
[1, 2, 3],
[7, 8, 9],
[4, 5, 7]]
我们可以旋转 n 次操作, 来获取每次旋转的对角线值
"""
n = int(input())
# n * n 方阵, 用 双向队列(deque) 方便 旋转操作(rotate)
rubiks_cube = deque(list(map(int, input().split())) for _ in range(n))
# max_diagonal 存储最大的正对角线值
max_diagonal = 0
# 对每次旋转求最大对角线
for _ in range(n):
i, cur_val = 0, 0
# 遍历方阵获取对角线值
while i < len(rubiks_cube):
cur_val += rubiks_cube[i][i]
i += 1
# 求最大的对角线
max_diagonal = max(cur_val, max_diagonal)
# 右旋转 1 单位
rubiks_cube.rotate(1)
print(max_diagonal)
deque的rotate方法的更多相关文章
- STL之Deque的使用方法
STL 中类 stack 实现了一个栈 1)push 能够插入元素 2)pop 移除栈顶元素 使用的时候,需要包含头文件 #include <stack>,stack 被声明如下: nam ...
- Android开发之Canvas rotate方法释疑
Canvas的rotate()函数本应该是很简单的一个函数,但是由于api手册言之不详,使用中难免有吃不准的地方.下面所记录的几点,都是我在使用中所迷惑过的问题,特此记录. 1,坐标原点在哪里? 如果 ...
- collections 模块(namedtuple, deque, Counter )
基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型 ...
- Python collections 模块用法举例
Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...
- python标准库:collections和heapq模块
http://blog.csdn.net/pipisorry/article/details/46947833 python额外的数据类型.collections模块和heapq模块的主要内容. 集合 ...
- 不可不知的Python模块: collections
原文:http://www.zlovezl.cn/articles/collections-in-python/ Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想 ...
- python(43):collections模块
Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 基本介绍: 我们都知道,python拥有一些内阻的 ...
- 【python】collections模块(有序字典,计数器,双向队列)
collections模块基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上 ...
- python 列表之队列
列表实现队列操作(FIFO),可以使用标准库里的 collections.deque,deque是double-ended quene的缩写,双端队列的意思,它可以实现从队列头部快速增加和取出对象. ...
- 【Python collections】
目录 namedtuple deque Counter OrderedDict defaultdict "在内置数据类型(dict.list.set.tuple)的基础上,collectio ...
随机推荐
- Java23种设计模式学习笔记
创建型模式:关注对象的创建过程 1.单例模式: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高, ...
- <vue 路由 4、嵌套路由>
一.效果 点击about后,新闻和体育属于about的子路由调用的页面 知识点说明 路由里使用children属性可以实现路由的嵌套 三.代码结构 注:主要是标红的几个文件 四.代码 重新编写这几个文 ...
- 高级数据结构---B树和B+树及mysql索引分析
mysql索引数据结构:https://www.cnblogs.com/nijunyang/p/11406688.html 几种树结构的对比: 二叉查找树:二叉搜索树,二叉排序树,优点查找快,但是在某 ...
- Webpack Vue瘦身,感受快到飞起的加载速度!
症结 在利用webpack脚手架搭建vue项目后,往往最终打包的.js和.css文件过于庞大,造成首次加载的时候白屏时间过长,影响用户体验,下图为未经任何优化直接npm run build之后的情况: ...
- winform 各种小功能
1. 实现待查询功能的combox private void Frm_Main_Load(object sender, EventArgs e) { cbox_Find.Items.Clear(); ...
- 修改Keil uvison4 字体样式
1.点击扳手配置 2.点击Colors & Fonts,选择其中的8051:Editor C Files,选择Text,点击右侧的Courier New... 3.在里面就可以调节字体了
- SpringMVC03—RestFul和Controller
控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中一个控制器类可以包含多个 ...
- [转帖]S3FS 简介及部署
PS:文章一般都会先首发于我的个人Blog上:S3FS 简介及部署 · TonghuaRoot's BloG. ,有需要的小伙伴可以直接订阅我的Blog,获取最新内容. 0x00 前言 S3FS可以把 ...
- [转帖]ipset详解
https://zhuanlan.zhihu.com/p/489103374 ipset创建:create 创建一个新的ipset集合:ipset create SETNAME TYPENAME SE ...
- 一个Redis dump文件的简要分析过程
摘要 遇到一个老大难的问题. 让帮忙分析一下一个Redis的dump文件. 虽然之前写过了rdb和rdr的文档 但是感觉大家都喜欢拿来主义. 没办法. 今天继续进行深入一点的分析. 原理其实还是基于r ...