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. 换架 3D 飞机,继续飞呀飞

    相信大多数图扑 HT 用户都曾见过这个飞机的 Demo,在图扑发展的这十年,这个 Demo 是许多学习 HT 用户一定会参考的经典 Demo 之一. 这个 Demo 用简洁的代码生动地展示了 OBJ ...

  2. CPLEX通过Python API获取Gap值的方法

    写在前面 最近在使用Cplex求解模型,尽管Cplex的Python API会自动输出引擎日志,但在多次求解中一次次看引擎日志找Gap值并做实验记录很麻烦,所以需要找到获取Gap值的方法.然而我在Cp ...

  3. vue结合element-ui实现多层复选框checkbox

    1.需求如上图所以: html相关代码如下: 1 <div class="intent-course-wrapper"> 2 <div class="c ...

  4. C#将日期格式化为指定格式

    private void btn_GetTime_Click(object sender, EventArgs e) { lab_time.Text = DateTime.Now.ToString(& ...

  5. 比Nginx更好用的Gateway!

    比Nginx更好用的Gateway! Token新开源Gateway,使用yarp实现的一个反向代理,支持界面操作动态添加集群添加路由绑定,并且支持动态添加域名绑定https证书,超强yarp+Fre ...

  6. 让vs支持wsl调试

    WSL安装 wsl --install -d Ubuntu 等一会提示输入用户名,不用管它,直接关闭,下次打开wsl,会以无密码的root用户打开 wsl卸载 wsl --unregister Ubu ...

  7. TCP连接状态的多种判断方法

    ​ 前言 在TCP网络编程模型中,无论是客户端还是服务端,在网络编程的过程中都需要判断连接的对方网络状态是否正常.在linux系统中,有很多种方式可以判断连接的对方网络是否已经断开. 通过错误码和信号 ...

  8. Advanced .Net Debugging 1:你必须知道的调试工具

    一.简介    我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用.他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查.这里的临时性是指,通过 ...

  9. 【水一篇】骚操作之net 6的winform启动的同时启动Net 6 WebApi【同一套代码】

    引言 有段时间没有写博客了,不知道写什么,加上最近一直在玩单片机方面的东西,所以有一些懈怠.首先呢,为什么会有这么一个问题,是在一个QQ群里,有看到有人提问,能不能在启动Winform的同时去启动一个 ...

  10. [转帖]2024年正常使用windows XP之一:系统下载篇

    https://zhuanlan.zhihu.com/p/347764175 半夏:2024年正常使用windows XP之一:系统下载篇 半夏:2024年正常使用windows XP之二:补丁及运行 ...