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. 【驱动】SPI驱动分析(三)-SPI关键数据类型

    SPI数据类型 SPI控制器驱动结构体 struct spi_master抽象了控制器硬件,在SoC中的指的就是内部SPI控制器,当向SPI核心层注册一个SPI控制器时就需要提供这样的一个结构体变量. ...

  2. element-china-area-data

    https://blog.csdn.net/xiejnpeng/article/details/111400199

  3. webpack4中hash、chunkhash和contenthash三者的区别

    https://blog.csdn.net/bubbling_coding/article/details/81561362

  4. Qt开发-共享内存使用范例,配合开发者密钥使用后台调试程序或者进入调试模式

    共享内存 就之前不是开发了一个Leventure_DeveloperKey用以调试程序嘛,在这里简单聊一下调试模式的方案. 这里的调试分为了两种,一种是调试模式,一种是开发者模式.需要这两种模式的原因 ...

  5. C#多曲线数据分析

    数据如下 统计效果图如下 程序初始化 private void Form1_Load(object sender, EventArgs e) { using (SqlConnection con = ...

  6. go 接口学习笔记

    这里是对接口在汇编层面上转换和实现的小结,详细了解可参考 Go 语言接口的原理 1. 类型转换:结构体到接口 1.1 结构体方法实现接口 package main type Duck interfac ...

  7. 每天学五分钟 Liunx 0110 | 服务篇:守护进程 systemd

    有些进程会在系统上运行较长时间,如前面的 Hello World 程序运行时产生的进程.有些进程运行瞬间就结束了,如执行 ps 命令产生的进程,也有的进程会常驻在内存中,提供相应的服务,这样的进程称为 ...

  8. 简单剖析Hashmap

    剖析 Java Hashmap 源码 在 Java 的集合框架中,HashMap 是一颗璀璨的明珠.通过深入挖掘其源码,我们将揭开 HashMap 的神秘面纱,理解其底层原理.扩容机制和数据结构. 1 ...

  9. android studio 如何把依赖导出成 jar

    反编译工具 dex-tools-2.1-SNAPSHOT 第一步 用一个普通的app工程,引用所有的库,然后生成apk文件 第二步 把apk文件,改扩展名为zip,解压后,里面有几个*.dex文件,拷 ...

  10. Linux-文件权限-rwx-chmod