1. 按奇偶性交换后的最大数字
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
用三个数组, flag
记录原数字每一位的奇偶性, odd
记录每一位中为奇数的数字, even
记录每一位中为偶数的数字。将奇数、偶数数组按降序排序,然后根据每一位的奇偶性填入最大的数即可。
代码
class Solution: def largestInteger(self, num: int) -> int: odd = [] even = [] flag = [] while num > 0: cur = num % 10 num = int(num / 10) if (cur & 1) == 0: even.append(cur) flag.insert(0, 0) else: odd.append(cur) flag.insert(0, 1) odd.sort(reverse=True) even.sort(reverse=True) i = 0 j = 0 for k in range(len(flag)): if flag[k] == 0: num = num * 10 + even[i] i += 1 else: num = num * 10 + odd[j] j += 1 return num
2. 向表达式添加括号后的最小结果
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
看起来好像很复杂,但看到表达式最长为10,显然可以暴力枚举。
先把左右数字分开,然后遍历每一对括号的情况即可。
代码
class Solution: def minimizeResult(self, expression: str) -> str: plusPos = expression.find("+") num_1 = expression[0: plusPos] num_2 = expression[plusPos + 1: len(expression)] m = len(num_1) n = len(num_2) ans = int(num_1) + int(num_2) lc = 0 rc = 0 for i in range(m): leftMul = int(num_1[0: i]) if num_1[0: i] != '' else 1 leftSum = int(num_1[i: m]) for j in range(n): rightMulti = int(num_2[n - j: n]) if num_2[n - j: n] != '' else 1 rightSum = int(num_2[0: n - j]) cur = (leftSum + rightSum) * leftMul * rightMulti if cur < ans: ans, lc, rc = cur, i, j ans = num_1[0: lc] + "(" + num_1[lc: m] + "+" + num_2[0: n - rc] + ")" + num_2[n - rc: n] return ans
3. K 次增加后的最大乘积
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
使用小根堆,每次最小值加一。参考这篇
代码
class Solution: def maximumProduct(self, nums: List[int], k: int) -> int: MOD = 1000000007 heapify(nums) while k: heapreplace(nums, nums[0] + 1) k -= 1 ans = 1 for num in nums: ans = (ans * num) % MOD return ans
4. 花园的最大总美丽值
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
本来以为尽量种满再计算即可,没注意到第二个实例中不种反而更多。参考这篇
代码
5.
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
代码
6.
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
代码
7.
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
代码
8.
难度
- Easy
- Medium
- Hard
完成情况
- 独立完成
- 参考思路
- 参考答案
思路
代码
Comments NOTHING