当前位置:   article > 正文

力扣刷题

力扣刷题

861. 翻转矩阵后的得分

“”"
有一个二维矩阵 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 <= A.length <= 20
1 <= A[0].length <= 20
A[i][j] 是 0 或 1
思路:
可以这样看,n*m的每个格子都具有一个权重,其中每一行权重都自左向右递减,
为使总和最大则尽可能使权重大的格子填“1”。最左边一列权重最大,所以总可以通过
行翻转使左边第一列全都置“1”,后面就不能再使用行翻转了,以免破环当前的结构,
所以考虑列翻转。对于除最左边第一列外的每一列,总可以通过列翻转使得该列“1”
的个数不小于“0”的个数。最后所有填“1”的格子的权重和即为答案。

“”"
源码

def matrix(A) -> int:
    m, n = len(A), len(A[0])
    for i in range(m):
        if A[i][0] == 0:
            for j in range(n):
                A[i][j] = 1 ^ A[i][j]
    mySum = 0
    #zip(*A)对数组A里的数组进行操作
    for i in zip(*A):
        n -= 1
        mySum += 2** n * max(i.count(1),i.count(0))
    return mySum
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

1. 两数之和

“”"
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

“”"
代码

def twoSum(Sums, target):
    hashmap = {
   }
    for index, num in enumerate(Sums):
        other_num = target - num
        if other_num in hashmap:
            return [hashmap[other_num], index]
        hashmap[num] = index
    
nums = [2, <
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/958222
推荐阅读
相关标签
  

闽ICP备14008679号