矩阵转置计算
问题描述
小U拿到一个大小为nxn的矩阵。她需要计算该矩阵的转置权值。转置权值的定义如下.
1.将矩阵进行转置操作,转置后的矩阵中的元素 b[i][j] 与原矩阵中的元素 a[j][i] 互换位置。
2.对于每个位置(i,j),计算原矩阵的元素与转置矩阵对应位置元素的差的绝对值。
3.最后,将所有差的绝对值累加起来,得出转置权值。
测试样例
样例1:
输入:n=2,a=[[1,2],[3,4]]输出:2
样例2:
输入:n=3,a=[[1,2,3],[4,5,6],[7,8,9]]输出:16
样例3:
输入:n=4,a=[[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]输出:20
- 计算转置矩阵:我们使用列表推导式来计算矩阵的转置。
transposed[i][j]等于a[j][i]。 - 计算转置权值:我们遍历原矩阵
a和转置矩阵transposed,计算每个位置(i, j)上元素差的绝对值,并累加到transpose_weight中。 - 返回结果:最后返回计算得到的转置权值
def solution(n: int, a: list) -> int:
# 计算转置矩阵
transposed = [[a[j][i] for j in range(n)] for i in range(n)]
# 计算转置权值
transpose_weight = 0
for i in range(n):
for j in range(n):
transpose_weight += abs(a[i][j] - transposed[i][j])
return transpose_weight
if __name__ == '__main__':
print(solution(2, [[1, 2], [3, 4]]) == 2)
print(solution(3, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == 16)
print(solution(4, [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]) == 20)
字典序最小的01字符串
问题描述
小U拥有一个由0和1组成的字符串,她可以进行最多k次操作,每次操作可以交换相邻的两个字符。日标是通过这些操作,使得最终得到的字符串字典序最小。
例如,小U当前有一个字符串 01018,她最多可以进行2次相邻字符交换操作。通过这些操作,她可以将字符串调整为 80101,这是可以通过不超过2次操作得到的字典序最小的字符串。
现在,小U想知道,经过最多k次操作后,能够得到的字典序最小的字符串是什么。
测试样例
样例1:
输入:n=5,k=2,s="01010"输出:'00101
样例2:
输入:n=7,k=3,s="1101001"输出:'0110101
样例3:
输入:n=4,k=1,s="1001"输出:'011
解题思路
- 将字符串转换为列表:由于字符串在 Python 中是不可变的,所以为了便于交换操作,我们首先将字符串
s转换为字符列表。 - 遍历字符串的每个位置:从第一个字符开始,一直到字符串的末尾。
- 寻找第一个 '1' :在遍历过程中,找到第一个字符为 '1' 的位置
i。 - 尝试交换 '1' 和它后面的 '0' :
-
- 从位置
i开始,向后查找最近的 '0',范围是在[i+1, min(i+k+1, n))内。这样可以保证交换操作不会超过k次。 - 如果在这个范围内找到了 '0',就将当前的 '1' 与找到的 '0' 交换位置。
- 每次交换后,减少剩余的操作次数
k。
- 从位置
- 更新操作次数:每次交换后,更新操作次数
k,减少的值是交换的两个字符之间的距离。 - 结束条件:如果操作次数
k用完了,或者已经遍历完整个字符串,结束循环。 - 将列表转换回字符串:最后,将字符列表转换回字符串,并返回这个结果。
代码实现
def solution(n: int, k: int, s: str) -> str:
s = list(s) # 将字符串转换为列表,以便于交换操作
for i in range(n):
if k == 0: # 如果操作次数已经用完,结束循环
break
if s[i] == '1': # 如果当前字符是'1'
for j in range(i + 1, min(n, i + k + 1)): # 尝试将'1'与后面的'0'交换
if s[j] == '0': # 找到后面的一个'0'
s[i], s[j] = s[j], s[i] # 交换'1'和'0'
k -= j - i # 减少操作次数
break # 退出内层循环
return ''.join(s) # 将列表转换回字符串并返回
if __name__ == '__main__':
print(solution(5, 2, "01010") == '00101')
print(solution(7, 3, "1101001") == '0110101')
print(solution(4, 1, "1001") == '0101')