【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))
相关推荐
liliangcsdn1 分钟前
因子权重矩阵处理-因子权重收缩Shrinkage算法的探索
开发语言·python·机器学习
用户8356290780518 分钟前
使用 Python 在 Excel 中添加和编辑形状
后端·python
2601_9623004720 分钟前
python在运维上可以干什么,请举几个具体的例子
运维·python·系统管理·网络监控·自动化脚本
小刘在重生~33 分钟前
Java 异常体系完整笔记
java·笔记·python
用户83562907805136 分钟前
使用 Python 为 PDF 添加和管理超链接
后端·python
千千寰宇37 分钟前
[Python/测试] pytest:简洁、可扩展的 Python 测试框架
python·软件质量保障与测试
少陽君38 分钟前
Python 并发编程:IO 等待用线程/asyncio,CPU 计算才用进程
数据库·python·php
2601_962284501 小时前
Python 和Java 哪个更适合做自动化测试?
java·自动化测试·python·接口测试·性能测试
liliangcsdn1 小时前
因子权重矩阵处理-滞回缓冲带+降频稳定化动态重选
开发语言·python·算法
泡泡鱼(敲代码中)1 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm