1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题就是翻译一下题目,从给定的id当中提取出年龄信息然后统计一下即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def countSeniors(self, details: List[str]) -> int:
cnt = 0
for p in details:
age = int(p[11:13])
if age > 60:
cnt += 1
return cnt
提交代码评测得到:耗时64ms,占用内存16.4MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题同样思路也挺直接的,就是先对每一行进行排序,然后每次删除都会删除同一列的元素了。因此,我们只需要对每一列的元素找出最大值然后进行求和即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def matrixSum(self, nums: List[List[int]]) -> int:
n, m = len(nums), len(nums[0])
nums = [sorted(line) for line in nums]
return sum(max(nums[i][j] for i in range(n)) for j in range(m))
提交代码评测得到:耗时793ms,占用内存34.9MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
很惭愧,这道题我没能想到思路,最后是看了大佬们的解答之后想明白的思路。
其实核心点就是注意到:
- 要获得最大的返回结果,那么必然是对其中某一个数连续进行k次乘2的操作。
因此,关键问题就是怎么找到这个目标值,一个简单的方式就是遍历一下,但是这样也就要求快速求得其他所有数的位或结果,而这个方式可以通过记录一下两个值进行考察:
- single: 直接的位或结果
- double: 只有当同一位上有至少两个数都为1才保留这一位上的值为1
此时,我们就可以快速得到任意一个值之外的所有结果的位或结果如下了:
s = double | (single & (~x))
综上,命题即可求解。
2. 代码实现
给出python代码实现如下:
class Solution:
def maximumOr(self, nums: List[int], k: int) -> int:
single = 0
double = 0
for x in nums:
double = double | (single & x)
single = single | x
res = 0
for x in nums:
s = single & (~x)
s = s | double
res = max(res, s | (x << k))
return res
提交代码评测得到:耗时760ms,占用内存31MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题其实就是找规律。
我们首先将所有的元素顺序排列,然后考察每一个元素作为最大值的情况,此时,不难发现:
- 此时满足条件的所有的子集恰为它自身加上之前所有出现过的子集以及空集的情况。
因此,我们不难基于此写出迭代方法如下。
2. 代码实现
给出python代码实现如下:
class Solution:
def sumOfPower(self, nums: List[int]) -> int:
MOD = 10**9 + 7
nums = sorted(nums)
s, tot = 0, 0
res = 0
for i, x in enumerate(nums):
s = tot + x
res = (res + s * x**2) % MOD
tot = (tot + s) % MOD
return res
提交代码评测得到:耗时560ms,占用内存27.2MB。