• 矩阵中幸运数(Python)


    给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
    幸运数 是指矩阵中满足同时下列两个条件的元素:在同一行的所有元素中最小
    在同一列的所有元素中最大
    示例 1:输入:matrix = [[3,7,8],[9,11,13],[15,16,17]],输出:[15]
    解释:15 是唯一的幸运数,因为它是其所在行中的最小值,也是所在列中的最大值。
    示例 2:输入:matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]],输出:[12]
    解释:12 是唯一的幸运数,因为它是其所在行中的最小值,也是所在列中的最大值。
    示例 3:输入:matrix = [[7,8],[1,2]],输出:[7]
    解释:7是唯一的幸运数字,因为它是行中的最小值,列中的最大值。
     

    解题思路:

    首先分别返回一个含有每行中最小元素的列表与每列中最大元素的列表;

    遍历整个列表,判断数是否是一行中最小的同时又是一列中最大的元素,最后返回result的列表即可。

    1. class Solution:
    2. def luckyNumbers(self,matrix:List[List[int]])->List[int]:
    3. m=len(matrix)
    4. n=len(matrix[0])
    5. min_row=[]
    6. max_col=[]
    7. for i in range(m):
    8. min_rpw.append(min(matrix[i]))
    9. for j in range(n):
    10. max_1=0
    11. for i in range(m):
    12. if matrix[i][j]>max_1:
    13. max_1=matrix[i][j]
    14. max_col.append(max_1)
    15. result=[]
    16. for i in range(m):
    17. for j in range(n):
    18. if matrix[i][j]==min_row[i] and martix[i][j]==max_col[j]:
    19. result.append(matrix[i][j])
    20. return result

    例子:

    1. arr=[[10,36,52],
    2. [33,24,88],
    3. [66,76,99]]
    4. #获取矩阵的元素个数,也就是行数
    5. row=len(arr) #row=3
    6. print("行数:{}".format(row))
    7. #获取矩阵的列数数,也就是一维数组中的元素个数
    8. col=len(arr[0]) #col=3
    9. print("列数:{}".format(col))
    10. #有多少行就有多少个行最小值,minrow[col],来进行统计col取值为0..row
    11. #同理有多少个列就有多少个列最大值,用maxcol[col],来进行统计col取值为0..col
    12. #先赋初值,题目是0到1024,那就可以让最小值初值为最大,最大值初值为最小
    13. minrow=[1024]*row
    14. for i in range(row):
    15. print(minrow[i])
    16. #这里就是把minrow[0]=1024,minrow[1]=1024,minrow[2]=1024
    17. maxcol=[0]*col
    18. for i in range(col):
    19. print(maxcol[i])
    20. #这里就是把mincol[0]=0,mincol[1]=0,mincol[2]=0
    21. #这个容易理解,要求最小,我就拿个最大的和你比,如果比我小,让换成小的,直到找到最小,同理找到最大的也是这样
    22. #i为行号,j为列号
    23. for i in range(row):
    24. for j in range(col):
    25. print(i,j,arr[i][j])
    26. minrow[i]=min(arr[i][j],minrow[i]) #第一次让arr[0,0]=10和minrow[0]=1024进行对比,取小的minrow[0]=10,以此类推
    27. maxcol[j]=max(arr[i][j],maxcol[j]) #第一次让arr[0,0]=10和maxrow[0]=0进行对比,取大的maxrow[0]=10,以此类推,一个元素即是在行i里面,同时又在列j里面,所以同时比较
    28. #通过上面比较,我们获取了minrow[0]=10,minrow[1]=24,minrow[2]=66,
    29. #通过上面比较,我们获取了maxcol[0]=66,maxcol[1]=76,maxcol[3]=99
    30. #接下来获取幸运数就容易了,两两比较有相等的就可以了
    31. for i in range(row):
    32. for j in range(col):
    33. if minrow[i]==maxcol[j]:
    34. print("幸运数是:",minrow[i])

    程序运行结果:

    行数:3
    3
    1024
    1024
    1024
    0
    0
    0
    0 0 10
    0 1 36
    0 2 52
    1 0 33
    1 1 24
    1 2 88
    2 0 66
    2 1 76
    2 2 99
    幸运数是: 66
  • 相关阅读:
    CenOS7各种自启动配置
    Transformers实战(二)快速入门文本相似度、检索式对话机器人
    微信小程序开发实战(网络请求设置)
    灵途科技荣获省级“专精特新”企业认定!
    借助GPU算力编译Android
    MaxKB-无需代码,30分钟创建基于大语言模型的本地知识库问答系统
    大数据-各类图像数据集下载地址
    深度学习笔记(十四):Transormer知识总结
    [pybind11] debug C++代码
    【PowerQuery】Excel的PowerQuery的连接组的导入与导出
  • 原文地址:https://blog.csdn.net/greatau/article/details/133765782