本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——561. 数组拆分、566. 重塑矩阵、575. 分糖果》。
目录
561. 数组拆分
题目描述
解题思路
解题代码
566. 重塑矩阵
题目描述
解题思路
解题代码
575. 分糖果
题目描述
解题思路
解题代码
561. 数组拆分
题目描述
给定长度为
2n
的整数数组nums
,你的任务是将这些数分成n
对, 例如(a1, b1), (a2, b2), ..., (an, bn)
,使得从1
到n
的min(ai, bi)
总和最大。返回该 最大总和 。
示例 1:
输入:nums = [1,4,3,2] 输出:4 解释:所有可能的分法(忽略元素顺序)为: 1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3 2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3 3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4 所以最大总和为 4示例 2:
输入:nums = [6,2,6,5,1,2] 输出:9 解释:最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9
解题思路
刚开始想的是暴力遍历去找最小值,但仔细一想这样好像更复杂了,其实只要将列表排序,然后取出1,3,5……索引上的值相加就可以了,这样就能保证最小值相加最大。
解题代码
def arrayPairSum(nums):
nums.sort(reverse=-1)
result = 0
for i in range(1,len(nums),2):
result += nums[i]
return result
566. 重塑矩阵
题目描述
给定长度为
2n
的整数数组nums
,你的任务是将这些数分成n
对, 例如(a1, b1), (a2, b2), ..., (an, bn)
,使得从1
到n
的min(ai, bi)
总和最大。返回该 最大总和 。
示例 1:
输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]]
输入:mat = [[1,2],[3,4]], r = 2, c = 4 输出:[[1,2],[3,4]]
解题思路
首先把嵌套列表转为普通列表,根据rc判断能不能转化,能转化的话用列表切片去添加列表,注意while循环的使用。
解题代码
def matrixReshape(mat, r: int, c: int):
all_num = []
result = []
for i in mat:
all_num.extend(i)
if r*c != len(all_num):
return mat
else:
begin = 0
while begin+c <=len(all_num):
result.append(all_num[begin:begin+c])
begin += c
return result
这是我击败率最高的一次了,哈哈哈!
575. 分糖果
题目描述
Alice 有
n
枚糖,其中第i
枚糖的类型为candyType[i]
。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。医生建议 Alice 要少摄入糖分,只吃掉她所有糖的
n / 2
即可(n
是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。给你一个长度为
n
的整数数组candyType
,返回: Alice 在仅吃掉n / 2
枚糖的情况下,可以吃到糖的 最多 种类数。示例 1:
输入:candyType = [1,1,2,2,3,3] 输出:3 解释:Alice 只能吃 6 / 2 = 3 枚糖,由于只有 3 种糖,她可以每种吃一枚。示例 2:
输入:candyType = [1,1,2,3] 输出:2 解释:Alice 只能吃 4 / 2 = 2 枚糖,不管她选择吃的种类是 [1,2]、[1,3] 还是 [2,3],她只能吃到两种不同类的糖。示例 3:
输入:candyType = [6,6,6,6] 输出:1 解释:Alice 只能吃 4 / 2 = 2 枚糖,尽管她能吃 2 枚,但只能吃到 1 种糖。
解题思路
这题看起来很复杂,其实很简单,只要求出列表长度一半和列表转集合长度,再相互比较返回最小的那一个就可以。
解题代码
def distributeCandies(candyType):
candy_type = len(set(candyType))
need_eat = int(len(candyType)/2)
if candy_type >= need_eat:
return min(candy_type, need_eat)