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方法的更多相关文章

  1. STL之Deque的使用方法

    STL 中类 stack 实现了一个栈 1)push 能够插入元素 2)pop 移除栈顶元素 使用的时候,需要包含头文件 #include <stack>,stack 被声明如下: nam ...

  2. Android开发之Canvas rotate方法释疑

    Canvas的rotate()函数本应该是很简单的一个函数,但是由于api手册言之不详,使用中难免有吃不准的地方.下面所记录的几点,都是我在使用中所迷惑过的问题,特此记录. 1,坐标原点在哪里? 如果 ...

  3. collections 模块(namedtuple, deque, Counter )

    基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型 ...

  4. Python collections 模块用法举例

    Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...

  5. python标准库:collections和heapq模块

    http://blog.csdn.net/pipisorry/article/details/46947833 python额外的数据类型.collections模块和heapq模块的主要内容. 集合 ...

  6. 不可不知的Python模块: collections

    原文:http://www.zlovezl.cn/articles/collections-in-python/ Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想 ...

  7. python(43):collections模块

    Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 基本介绍: 我们都知道,python拥有一些内阻的 ...

  8. 【python】collections模块(有序字典,计数器,双向队列)

    collections模块基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上 ...

  9. python 列表之队列

    列表实现队列操作(FIFO),可以使用标准库里的 collections.deque,deque是double-ended quene的缩写,双端队列的意思,它可以实现从队列头部快速增加和取出对象. ...

  10. 【Python collections】

    目录 namedtuple deque Counter OrderedDict defaultdict "在内置数据类型(dict.list.set.tuple)的基础上,collectio ...

随机推荐

  1. uniapp解决图形验证码问题及arraybuffer二进制转base64格式图片

    https://www.cnblogs.com/huihuihero/p/13183031.html

  2. DBA实战面试题(一)

    数据库面试测试题(一) 简述当前主流RDBMS软件有哪些?开源且跨平台的数据库软件有哪些? 参考答案 当前主流的数据库服务器软件有: Oracle . DB2 . SQL SERVER .MySQL ...

  3. [转帖]OceanBase 存储引擎详解

    https://zhuanlan.zhihu.com/p/436485359 作者简介:沈炼,蚂蚁集团技术风险部数据库高级专家毕业于东南大学,2014年以来从事 OceanBase 在蚂蚁的架构工作, ...

  4. [转帖]Linux字符截取命令-cut

    概述 cut是一个选取命令,.一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的. 语法 cut [-bn] [file] 1 或 cut [-c] [file] ...

  5. [转帖]Lightning 实操指南

    2.2.2 Lightning 实操指南 这一节将介绍如何使用 Lightning 导入数据的实操 2.2.2.1 TiDB Lightning 快速开始 注意 TiDB Lightning 运行后, ...

  6. [转帖]linux服务之tuned

    https://www.cnblogs.com/createyuan/p/5701650.html RHEL/CentOS 在 6.3 版本以后引入了一套新的系统调优工具 tuned/tuned-ad ...

  7. [转帖]2.6 The jcmd Utility

    https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html#BABEJDGE The j ...

  8. 400G 光模块的价格

    400G 光模块的价格  令人惊叹... https://www.fs.com/cn/c/40g-100g-transceivers-889?pro_type=&sortby=priced&a ...

  9. K8S的pod展示镜像信息

    https://kubernetes.io/zh/docs/tasks/access-application-cluster/list-all-running-container-images/ ku ...

  10. 使用Docker快速搭建InnoDB Cluster集群的过程

    感谢 感谢方神的大力帮助,自己对数据库基本一窍不通.只是照葫芦画瓢做出来的. 感谢来自如下两个网站的资料,我进行了一定程度的融合. https://blog.csdn.net/weixin_43972 ...