【Python LeetCode 专题】每日一题

  • 2025/03
    • [2829. k-avoiding 数组的最小总和](#2829. k-avoiding 数组的最小总和)

2025/03

2829. k-avoiding 数组的最小总和

python 复制代码
class Solution:
    def minimumSum(self, n: int, k: int) -> int:
        # 思路:对任何一个正整数 x,不能同时存在 k-x
        nums = []
        ans =  2501

        def backtrace(x):
            nonlocal ans

            if sum(nums) > ans:  # 剪枝,比 ans 还大不需要考虑
                return 

            if len(nums) == n:  # 终止条件,数组塞满了
                ans = min(sum(nums), ans)
                return 

            for i in range(1, 80):
                if i not in nums and (k - i) not in nums:  # 当 k-i 不在数组中才可以选
                    nums.append(i)   # 做选择
                    backtrace(x+1)  # 递归
                    nums.pop()   # 撤销选择
            return
        
        backtrace(1)  # 从小的正整数开始
        return ans

不出意外就会超时了!

贪心吧,举例来说, 假设不能选和为 4 的数对,肯定选 1 不选 3 啊! O ( n ) O(n) O(n),

python 复制代码
class Solution:
    def minimumSum(self, n: int, k: int) -> int:
        # 思路:对任何一个正整数 x,不能同时存在 k-x
        nums = []
        sum = 0
        for i in range(1, 100):
            if len(nums) == n:  # 如果够 n 个就退出循环
                break

            if (k-i) not in nums:  # k-i 不在就塞进数组
                nums.append(i)
                sum += i
        
        return sum

过了,但是还能优化,直接上数学公式, O ( 1 ) O(1) O(1),

python 复制代码
class Solution:
    def minimumSum(self, n: int, k: int) -> int:
        # 思路:对任何一个正整数 x,不能同时存在 k-x

        if 2 * n <= k:
            return sum(range(1, n + 1))  # 注意 range 左闭右开
        part_num = k - (k // 2 + 1)
        return sum(range(1, k // 2 + 1)) + sum(range(k, n + part_num + 1))
相关推荐
GinoWi2 分钟前
Chapter 6 Python中的字典
python
zh路西法6 分钟前
【宇树机器人强化学习】(七):复杂地形的生成与训练
python·深度学习·机器学习·机器人
python猿11 分钟前
打卡Python王者归来--第30天
开发语言·python
2401_8318249626 分钟前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
2401_8796938728 分钟前
用Pygame开发你的第一个小游戏
jvm·数据库·python
用户03321266636735 分钟前
使用 Python 查找并高亮 Word 文档中的文本
python
xushichao198937 分钟前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python
yy我不解释1 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(三)
开发语言·python·ai作画·音视频·comfyui
冗量1 小时前
langchain的学习路径
python·langchain
love530love1 小时前
不用聊天软件 OpenClaw 手机浏览器远程访问控制:Tailscale 配置、设备配对与常见问题全解
人工智能·windows·python·智能手机·tailscale·openclaw·远程访问控制