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

minimum number

part 1

给一串0到9的数字,返回最小可以组成的整数,以string返回

比如 [1, 3, 3, 4, 2] -> "12334"

所有数字用一遍,0除外,比如[0, 1, 2]就返回12

part 2

part1的基础上返回值要大于或等于一个lower bound

 1 from collections import Counter
 2 
 3 def find_min_greater_or_equal(nums, lower_bound):
 4     s_bound = str(lower_bound)
 5     n = len(s_bound)
 6     nums.sort()  # 排序方便我们取最小值
 7     
 8     def solve(index, is_greater, used_mask):
 9         # 递归终止:已经填完了所有位数
10         if index == n:
11             return ""
12         
13         target = int(s_bound[index])
14         
15         for i in range(len(nums)):
16             if not used_mask[i]:
17                 digit = nums[i]
18                 
19                 # 情况1:之前位已经比 lower_bound 大了,后面全选最小的
20                 if is_greater:
21                     res = solve(index + 1, True, used_mask[:i] + [True] + used_mask[i+1:])
22                     if res is not None:
23                         return str(digit) + res
24                 
25                 # 情况2:当前位和 lower_bound 相同
26                 elif digit == target:
27                     res = solve(index + 1, False, used_mask[:i] + [True] + used_mask[i+1:])
28                     if res is not None:
29                         return str(digit) + res
30                 
31                 # 情况3:当前位第一次比 lower_bound 大
32                 elif digit > target:
33                     res = solve(index + 1, True, used_mask[:i] + [True] + used_mask[i+1:])
34                     if res is not None:
35                         return str(digit) + res
36         
37         return None
38 
39     # 调用递归
40     result = solve(0, False, [False] * len(nums))
41     return int(result) if result else None
42 
43 # 测试例子
44 print(find_min_greater_or_equal([7, 1, 8], 719))  # 输出: 781
45 print(find_min_greater_or_equal([1, 2, 3], 123))  # 输出: 123
46 print(find_min_greater_or_equal([0, 5, 5], 540))  # 输出: 550

 

比如 [7, 1, 8], lower bound = 719,返回781

 Instead of sorting the entire array, we count the occurrences of each digit. Since we only care about 1–9, we iterate through those keys in order to build our string.
 1 def smallest_int_optimized(digits):
 2     # Step 1: Count frequencies - O(N)
 3     counts = [0] * 10
 4     for d in digits:
 5         counts[d] += 1
 6     
 7     # Step 2: Build string from 1 to 9 - O(1) (fixed number of digits)
 8     res = []
 9     for d in range(1, 10):
10         res.append(str(d) * counts[d])
11         
12     return "".join(res)

 

http://www.jsqmd.com/news/427562/

相关文章:

  • 2026年热门的亚克力板材/亚克力潜水池高口碑品牌推荐 - 品牌宣传支持者
  • SiameseUIE在网络安全领域的应用:威胁情报抽取
  • 国企OA系统如何通过HTML+PHP优化4K视频文件的分片上传效率?
  • Ostrakon-VL-8B零售合规知识库构建:基于Ostrakon-VL自动生成SOP检查清单
  • 国防军工领域如何通过HTML+PHP保障机密视频文件的分片防篡改上传?
  • OWL ADVENTURE一键部署教程:基于Ubuntu 20.04的快速环境搭建
  • 小白必看!GTE中文向量模型保姆级部署教程
  • 2026智能焊接系统选型指南:如何选择靠谱的机器人品牌商_ - 品牌2026
  • 2026应急启动电源跨境供货商怎么选 靠谱货源整理 - 品牌2026
  • 2026 年湖北省景观规划与设计行业全服务商优选:中美丽岛景观有限公司 - 2026年企业推荐榜
  • 2026年3月湖南循环水药剂服务商综合评估与选购指南 - 2026年企业推荐榜
  • Youtu-Parsing图表理解:柱状图/折线图/饼图→Mermaid语法自动转换逻辑
  • CosyVoice模型参数详解与优化:提升25Hz音频生成效率
  • CAD 二次开发的技术难点
  • LiuJuan20260223Zimage与SolidWorks集成:3D模型智能生成实战
  • 射频PCB地平面尺寸、过孔与屏蔽系统方案
  • 使用Visio设计AIGlasses OS Pro视觉分析流程图
  • 射频PCB布局布线-尺寸、间距、顺序决定系统稳定性
  • 基于SpringBoot+Vue的工业互联网设备管理系统
  • LLM+图数据库新纪元!GraphSeek框架如何实现自然语言交互式分析,成功率暴涨86%!
  • JavaScript与MogFace-large结合:浏览器端实时人脸检测方案
  • 学霸同款 8个降AIGC工具测评:自考降AI率必备神器
  • 用过才敢说! 降AIGC网站 千笔·降AI率助手 VS 锐智 AI,研究生专属更高效
  • Qwen3-VL-8B惊艳效果:处理多页PDF截图拼接+跨页逻辑关联分析能力演示
  • ‌自动化测试转型:从脚本编写到框架调优
  • DAMOYOLO-S保姆级使用指南:上传图片秒出结果,新手也能玩转AI检测
  • AOSP 多分支项目中 `git pull` 为什么很慢?如何只同步当前分支?
  • 2026天猫入驻可靠服务品牌排行:天猫手机哪个公司代开店铺比较专业、天猫电动车哪个公司可以帮忙开店选择指南 - 优质品牌商家
  • SPIRAN ART SUMMONER作品集:涵盖水都、比塞德、圣域等FFX全地图风格生成实录
  • 手把手教你用Qwen3-VL-Reranker搭建智能内容推荐系统