听:测试开发面试题解(18)-翻转矩阵后的得分

关注我们,一起学习+涨薪不掉队!

听:测试开发面试题解(18)-翻转矩阵后的得分

分享你的测试成长经历,吴老师免费送书 !

文 | 何发奋

测试开发面试题解 - 18.翻转矩阵后的得分
听:测试开发面试题解(18)-翻转矩阵后的得分


难度分类

中等


题目描述

有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。
在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。
示例:
输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]
输出:39
解释:
转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]
0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39


算法

  1. 首先通过行翻转使矩阵的第一列全部是1,因为高位是1的情况下组成的值必然更大
  2. 从第二列开始,如果此列的0多则按列翻转,如果1多则保持原样。原理则是某一列的1多组成的值相加的和越大如:

听:测试开发面试题解(18)-翻转矩阵后的得分

翻转后:

听:测试开发面试题解(18)-翻转矩阵后的得分

上面的矩阵1111+1010+1001如果翻转第二列得出的值1011+1110+1101肯定大于1111+1110+1101,因为第二列的1的个数大于0
针对第三列,继续这样计算,如果第三列的0多则进行翻转,如果1多则保持原样,一直这样操作,直到矩阵的最后一列。

代码

(左右滑动或横屏阅读)

 1def matrixScore(A):
2    #按行翻转,保证第一列的数都是1,即每一行都是以1开始的,翻转后以后的翻转仅能按照列翻转了
3    for i in range(len(A)):
4        if A[i][0] == 0:
5            for j in range(len(A[i])):
6                if A[i][j] ==0:
7                    A[i][j] =1
8                else:
9                    A[i][j] =0
10    # 从第二列开始统计此列的0和1的个数,如果0的个数大于1的个数,则进行按列翻转
11    for i in range(1,len(A[0])):
12        count = 0
13        temp = []
14        for j in range(len(A)):
15            if A[j][i] ==0:
16                count +=1
17        if count>len(A)//2:
18            for j in range(len(A)):
19                if A[j][i] ==0:
20                    A[j][i] =1
21                else:
22                    A[j][i] =0
23    result = 0
24    #按行读取,转换为十进制相加求结果
25    for line in A:
26        result +=int(''.join([str(a) for a in line]),2)
27    return result

附件代码-使用数学公式完成翻转

 1def matrixScore(A):
2    #按行翻转,保证第一列的数都是1,即每一行都是以1开始的,翻转后以后的翻转仅能按照列翻转了
3    for i in range(len(A)):
4        if A[i][0] == 0:
5            for j in range(len(A[i])):
6                A[i][j] =1-A[i][j]
7    # 从第二列开始统计此列的0和1的个数,如果0的个数大于1的个数,则进行按列翻转
8    for i in range(1,len(A[0])):
9        count = 0
10        temp = []
11        for j in range(len(A)):
12            if A[j][i] ==0:
13                count +=1
14        if count>len(A)//2:
15            for j in range(len(A)):
16                A[j][i] = 1- A[j][i]
17    result = 0
18    #按行读取,转换为十进制相加求结果
19    for line in A:
20        result +=int(''.join([str(a) for a in line]),2)
21    return result


免费领取三节测试开发试听课
链接:https://pan.baidu.com/s/1nKqINq42KWm-hupBoebBWw
提取码:k5fv

无论上课或自学,

你首先需要准备:

每天 2 小时+的学习时间

每天坚持写代码的习惯!

有投入才有产出,

10k+的涨幅需要 1 年以上的努力!

祝你成功!


光荣之路出品

测试大佬和小白的故事

2020年度测试现状报告

自动化测试的目标

手把手教你pytest测试框架

测开必备-flask网站开发

IOS真机移动端App+H5混合自动化测试实战

产品测试规范

内推:字节跳动 | 测试开发

招聘QQ群:203715128


文章转载自微信公众号:光荣之路

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/145673.html

(0)

相关推荐

  • 植物角区域活动,植物角活动

    掌上曲靖讯 陈鹤琴先生提倡:“大自然、大社会都是活教材”,班级种植区域有着深厚的教育价值。幼儿园种植区一直以来都是幼儿园在创设教育环境时不可缺少的一部分。为了让幼儿体验田园生活,回归自然,同时也让孩子体验劳动收获的快乐,根据《纲要》的精神要求,富源县幼儿园充分利用本土教育资源,在植物角围绕主题,种植适合应季的植物,收集应季的果实,应季观赏花卉、植物,积极开展植物角的相关活动。

    生活 2021年11月1日
  • 尖椒豆皮怎么炒好吃 制作尖椒豆皮的方法

    尖椒豆皮怎么炒好吃 制作尖椒豆皮的方法2021-11-19 22:04:551、主料:尖椒200克、干豆皮适量。 2、调料:酱油10克、糖5克、盐2克、豆豉适量、葱姜适量。 3、尖椒洗净切条,豆皮切条,葱姜切末备用。 4

    生活 2021年11月20日
  • 鸧鸆的意思(字义,诗词)

    词组鸧鸆的意思(字义,诗词)基本解释详细字义 鸧鸆拼音:cāng yú注音:ㄘㄤ ㄩˊ解释:传说中的九头鸟。古代诗词清代.邝露.述征 其七:「天鸡警晨羲,鸧鸆悽夜弦。」 基本字义
    鸧(鶬)cāng(ㄘ

    阅读 2021年11月19日
  • 大蔡的意思(字义,诗词)

    词组大蔡的意思(字义,诗词)基本解释详细字义 大蔡拼音:dà cài注音:ㄉㄚˋㄉㄞˋㄊㄞˋ ㄘㄞˋ解释:大龟。古代诗词宋代.司马光.谢胡文学惠水牛图二卷:「得之乃虚器,无异居大蔡。」宋代.葛胜仲.李楚老尚书挽歌

    阅读 2021年11月18日
  • 魔兽8.0大米词缀,魔兽世界9.0大米词缀效果

    魔兽10.0美词缀怎么样? 很多玩家不知道魔兽10.0的美词缀是怎么回事,让我们来看看魔兽的雷击效果列表。 希望能帮助各位玩家顺利进行游戏内容。 希望能帮到大家。 : 魔兽世界霹雳...

    教程 2022年10月19日
  • 天龙八部手游银子交易平台,天龙八部手游怎么交易银币

    天龙八部手游如何交易银子天龙八部手游买银子怎么操作?. 帮会炼金:每天可以通过消耗活跃度来参加帮会炼金活动,每天大概可以参加5次,可以获取大概5000左右的银两。 副本获取:游戏中,每天都可以根据玩家等级参与很多。天龙八部手游倒银子详细方法?天龙八部手游倒银子是通过寄售系统的,可以把小号的银子倒到大号来,也可以通过银子的倒卖赚钱。 天龙八部手游倒银子是通过寄售系统的,可以把小号的银子倒到大。天龙八部手游更新后怎么交易大量银两。用什么材料?手游天龙八部3d玩家之间没有交易选项,所有能交易的道具只能通过寄售进行。如果需要转送道具给朋友或者其它玩家,也只能通过寄售。点开寄售,将要交易的物品设置。天龙

    阅读 2022年7月5日