鱼C论坛

 找回密码
 立即注册
查看: 2216|回复: 8

[已解决]矩阵中的幸运数

[复制链接]
发表于 2020-10-22 15:56:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近求助帖有点少了,难道各位都变大神,就我还是小菜B一个吗?
如果是这样的话我就发点题目给你做做

请看题:

给你一个 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 是唯一的幸运数,因为它是其所在行中的最小值,也是所在列中的最大值。


来吧,是时候表演真正的技术了


最佳答案
2020-10-22 17:40:32
本帖最后由 hrp 于 2020-10-22 17:46 编辑
  1. rmins = [min(l) for l in matrix]
  2. cmaxs = [max(l) for l in zip(*matrix)]

  3. res = [n for n in rmins if n in cmaxs]
  4. print(res)
复制代码


遭了,发现不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-22 16:10:51 | 显示全部楼层
  1. import numpy as np

  2. matrix = [[3, 7, 8], [9, 11, 13], [15, 16, 17]]
  3. #matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]]
  4. m = np.array(matrix).reshape(len(matrix),len(matrix[0]))
  5. print(m)
  6. index_min = m.min(axis=1)
  7. column_max = m.max(axis=0)
  8. num=[i for i in index_min if i in column_max]
  9. if len(num)>0:
  10.     print('幸运数字:', num)
  11. else:
  12.     print('未找到')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-22 16:17:37 | 显示全部楼层

基础题,不能用到库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 16:45:42 | 显示全部楼层
jtxs0000 发表于 2020-10-22 16:17
基础题,不能用到库

这样够基础了吧,都是循环
  1. matrix = [[3, 7, 8], [9, 11, 13], [15, 16, 17]]
  2. #matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]]
  3. matrix_new=[[] for i in range(len(matrix[0]))]
  4. #行中最小
  5. index_min=[]
  6. #列中最大
  7. column_max=[]
  8. for key,value in enumerate(matrix):
  9.     for key2,value2 in enumerate(value):
  10.         matrix_new[key2].append(value2)
  11.     index_min.append(min(value))
  12. for key,value in enumerate(matrix_new):
  13.     column_max.append(max(value))

  14. num=[i for i in index_min if i in column_max]
  15. if len(num)>0:
  16.     print('幸运数字:', num)
  17. else:
  18.     print('未找到')
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
jtxs0000 + 1 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-22 16:56:44 | 显示全部楼层
还有没有要挑战一下自己的,没有我就结贴咯
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 17:40:32 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrp 于 2020-10-22 17:46 编辑
  1. rmins = [min(l) for l in matrix]
  2. cmaxs = [max(l) for l in zip(*matrix)]

  3. res = [n for n in rmins if n in cmaxs]
  4. print(res)
复制代码


遭了,发现不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 17:55:42 | 显示全部楼层
hrp 发表于 2020-10-22 17:40
遭了,发现不对

对的啊,我写了这么多,也就是为了矩阵倒置,zip(*)就可以搞定
学习到了zip()的用法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 17:58:13 From FishC Mobile | 显示全部楼层
疾风怪盗 发表于 2020-10-22 17:55
对的啊,我写了这么多,也就是为了矩阵倒置,zip(*)就可以搞定
学习到了zip()的用法


我脑子有点蒙,也不知道对不对
zip可以比较方便把按行分组变成按列分组
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 18:03:06 | 显示全部楼层
hrp 发表于 2020-10-22 17:58
我脑子有点蒙,也不知道对不对
zip可以比较方便把按行分组变成按列分组

运行下来是对的,拆开来打印看了下,也对的
zip()这个函数以前用不多,今天学到的了新知识
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 14:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表