当前位置: 首页 > news >正文

【Python LeetCode 专题】每日一题

  • 2025/03
    • 2829. k-avoiding 数组的最小总和
    • 2712. 使所有字符相等的最小成本
    • 2716. 最小化字符串长度

2025/03

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

在这里插入图片描述
上 回溯,

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)

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)

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))

2712. 使所有字符相等的最小成本

在这里插入图片描述

class Solution:
    def minimumCost(self, s: str) -> int:
        # 思路:反转为全 '0' 或全 '1',从中间往两边反转

        n = len(s)
        mid = n // 2
        
        def reverse_to(to):
            """ 反转为 to """
            cost = 0
            reverse = False
            for i in range(mid, -1, -1):
                if (s[i] != to and not reverse) or (s[i] == to and reverse):
                    cost += i + 1
                    reverse = not reverse
            reverse = False

            for j in range(mid + 1, n):
                if (s[j] != to and not reverse) or (s[j] == to and reverse):
                    cost += n - j
                    reverse = not reverse
            return cost

        return min(reverse_to('0'), reverse_to('1'))

2716. 最小化字符串长度

在这里插入图片描述

说人话,不就是去重嘛!上 数据结构,

class Solution:
    def minimizedStringLength(self, s: str) -> int:
        return len(set(s))

散了散了。。。

http://www.dtcms.com/a/99783.html

相关文章:

  • 【20期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股实时最新分时MACD数据及接口API说明文档
  • 本地缓存之Guava Cache
  • Linux CentOS 7 搭建我的世界服务器详细教程 (丐版 使用虚拟机搭建)
  • CTFshow命令执行(55-71)
  • 24_原型和原型链_this
  • GitHub上免费学习工具的精选汇总
  • 数字电路基础
  • 【Java/数据结构】优先级队列(PriorityQueue)(图文版)
  • PDF处理控件Aspose.PDF教程:通过C#、Java 和 Python删除 PDF中的水印
  • 测试cursor-AI编辑器
  • Python FastApi(8):模式的额外信息、额外数据类型
  • java网盘项目,文件和文件夹用两个表还是一个表,两个表理论查询效率慢了为啥要用,有啥优势
  • 数据结构 KMP 字符串匹配算法
  • 《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务
  • leetcode刷题日记——跳跃游戏 II
  • 编程语言
  • 【每日论文】DINeMo: Learning Neural Mesh Models with no 3D Annotations
  • Visual Studio中创建和配置设置文件(Settings.settings) - 详细步骤指南——待调试
  • 基于springboot小说题材在线阅读平台(源码+lw+部署文档+讲解),源码可白嫖!
  • QLoRA对大模型微调
  • Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(ollama方式)
  • 基于Elasticsearch的个性化内容推荐技术实践
  • 方案推介:80页产品经理培训PPT课件:产品调研、用户画像、用户需求的收集【文末附下载链接】
  • vue3+bpmn.js基本使用
  • 缓存击穿中的二次判断
  • 鸿蒙项目源码-仿抖音短视频-原创!原创!原创!
  • Nexus Docker 推送提示授权错误
  • 如何进行Prompt调优?
  • 【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
  • Spring Boot 项目引入 MCP 详细指南