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

DeepSeek LeetCode 1125.最小的必要团队 public int[] smallestSufficientTeam(String[] req_skills, List<List

这是 LeetCode 1125 “最小的必要团队”问题。要求从候选人中选择一个最小的团队使得团队成员的技能集合覆盖所有必需的技能。问题理解有一个技能需求列表req_skills如[java, python, cpp]有people列表people[i]是第i个人拥有的技能列表目标是选出人数最少的团队使团队掌握的技能集合包含所有req_skills返回团队成员的下标数组任意顺序如果有多解返回任意一个难点技能数量最多 16 个可状态压缩人数最多 60 人需要找到最小覆盖是一个集合覆盖问题的变种但可以用状态压缩动态规划求解核心思路1. 状态压缩由于req_skills长度 ≤ 16可以用一个整数mask表示当前已掌握的技能集合第i位为 1 表示已掌握第i个技能目标状态target (1 m) - 12. 预处理每个人的技能掩码将每个人拥有的技能映射到req_skills中的位置生成一个整数掩码skillMask[i]。3. 动态规划定义设dp[mask] 达到技能集合mask所需的最少人数prev[mask] 达到mask时最后添加的人prevMask[mask] 添加最后一个人之前的状态状态转移对于每个人i掩码sm从任意状态mask转移到mask | smif dp[mask] 1 dp[mask | sm]: dp[mask | sm] dp[mask] 1 prev[mask | sm] i prevMask[mask | sm] mask4. 初始化和结果重建dp[0] 0其他dp[mask] INF从target开始通过prev和prevMask回溯得到团队成员代码实现importjava.util.*;classSolution{publicint[]smallestSufficientTeam(String[]req_skills,ListListStringpeople){intmreq_skills.length;intnpeople.size();// 1. 将技能映射到下标MapString,IntegerskillIndexnewHashMap();for(inti0;im;i){skillIndex.put(req_skills[i],i);}// 2. 计算每个人的技能掩码int[]skillMasknewint[n];for(inti0;in;i){intmask0;for(Stringskill:people.get(i)){if(skillIndex.containsKey(skill)){mask|(1skillIndex.get(skill));}}skillMask[i]mask;}// 3. DP 初始化inttarget(1m)-1;int[]dpnewint[1m];Arrays.fill(dp,Integer.MAX_VALUE/2);dp[0]0;int[]prevPersonnewint[1m];int[]prevMasknewint[1m];Arrays.fill(prevPerson,-1);// 4. 状态转移for(intmask0;masktarget;mask){if(dp[mask]Integer.MAX_VALUE/2)continue;for(inti0;in;i){intnewMaskmask|skillMask[i];if(dp[mask]1dp[newMask]){dp[newMask]dp[mask]1;prevPerson[newMask]i;prevMask[newMask]mask;}}}// 5. 回溯重建结果ListIntegerresultnewArrayList();intcurtarget;while(cur!0){intpersonprevPerson[cur];result.add(person);curprevMask[cur];}// 转换为 int[]int[]ansnewint[result.size()];for(inti0;ians.length;i){ans[i]result.get(i);}returnans;}}示例演示输入req_skills [java, python, cpp] people [ [java], [python], [cpp], [java, python], [python, cpp], [java, cpp], [java, python, cpp] ]计算过程技能映射java→0, python→1, cpp→2技能掩码person0: 001 (1)person1: 010 (2)person2: 100 (4)person3: 011 (3)person4: 110 (6)person5: 101 (5)person6: 111 (7)DP 路径示例一种最优解mask000 - 加 person3 (mask011) - mask011 mask011 - 加 person2 (mask100) - mask111 (target)团队[3, 2]→ 即 person3javapython和 person2cpp优化版本剪枝可以提前去掉被其他人“包含”的人减少状态转移次数// 去除冗余人员如果 personA 的技能集合是 personB 的子集且 personB 覆盖更多// 但 personA 仍可能有用因为需要组合所以需要谨慎处理// 更常用的是直接 DP因为 m ≤ 16状态数 ≤ 65536n ≤ 60总复杂度 ~ 4e6完全可行复杂度分析时间复杂度O(n × 2^m)其中 m ≤ 16n ≤ 60约 60 × 65536 ≈ 400 万次操作完全可行空间复杂度O(2^m)用于存储 dp 和回溯信息为什么不能直接用贪心集合覆盖问题是 NP-hard 的贪心算法每次选覆盖最多未覆盖技能的人不一定得到最优解人数最少。例如技能[A,B,C]人1:[A,B]人2:[B,C]人3:[A,C]贪心会选择人1覆盖2个剩下C需要人2或人3总人数2但最优解是人2人3覆盖全部也是2只是说明贪心可能无法保证最优。总结这道题是集合覆盖问题在技能数量有限≤16情况下的状态压缩 DP 解法状态压缩用整数位掩码表示技能集合DP 定义dp[mask]表示达到 mask 所需最少人数转移枚举每个人更新可达状态回溯记录转移路径重建团队这种 DP 是解决小规模集合覆盖问题的标准方法适合技能数 ≤ 20 的场景。

相关文章:

DeepSeek LeetCode 1125.最小的必要团队 public int[] smallestSufficientTeam(String[] req_skills, List<List

这是 LeetCode 1125 “最小的必要团队”问题。要求从候选人中选择一个最小的团队,使得团队成员的技能集合覆盖所有必需的技能。问题理解 有一个技能需求列表 req_skills,如 ["java", "python", "cpp"]有 people 列表&…...

InfluxDB(一)——一个高效处理数据的时序数据库

目录 一、什么是时序数据库InfluxDB? 关系型数据库(行式存储)是怎么存的? 时序数据库(列式存储)是怎么存的? 二、InfluxDB的特点 1. 极致的写入性能 2. 高效的存储压缩 3. 独特的数据模型…...

DeepSeek LintCode 3706 · 满足条件的数对的数量 public long countValidPairs(int[] nums1, int[] nums2, int dif

这个问题是 LintCode 3706 “满足条件的数对的数量”&#xff0c;要求统计满足 nums1[i] - nums1[j] < nums2[i] - nums2[j] diff&#xff08;其中 i < j&#xff09;的数对 (i, j) 的数量。 问题理解 给定两个数组 nums1 和 nums2&#xff0c;以及一个整数 diff&#…...

光伏混合储能直流微电网simulink模型 1.直流微电网由锂电池,超级电容,光伏和直流负载组成 2

光伏混合储能直流微电网simulink模型 1.直流微电网由锂电池&#xff0c;超级电容&#xff0c;光伏和直流负载组成 2.光伏采用电导增量法实现最大功率输出 3.锂电池和超级电容采用直流母线电压控制策略&#xff0c;根据直流母线电压高低实现充放电 实现以下目标&#xff1a; 1.光…...

OpenClaw省钱全攻略,掌握这5招,每月少花几百块冤枉钱

手把手教你一键部署OpenClaw&#xff0c;连接微信、QQ、飞书、钉钉等&#xff0c;1分钟全搞定&#xff01; 刚把OpenClaw折腾好&#xff0c;你可能正沉浸在AI秒回代码、自动理任务的神奇体验里&#xff0c;心里直呼过瘾。可还没等新鲜劲过去&#xff0c;一翻后台账单&#xff…...

别只盯着 Claw 了,这波“真香”技能才是真的生产力神器!

手把手教你一键部署OpenClaw&#xff0c;连接微信、QQ、飞书、钉钉等&#xff0c;1分钟全搞定&#xff01; 说白了&#xff0c;各家大厂出的 Claw 产品&#xff0c;核心逻辑就是“AI 大模型 技能插件”。模型是地基&#xff0c;而你用得爽不爽&#xff0c;全看这些技能给不给…...

深夜调车的时候突然发现,Apollo的泊车轨迹优化藏着不少“骚操作“。咱们今天不聊虚的,直接扒开代码看三个核心模块怎么打架...哦不,怎么配合的

apollo 泊车轨迹优化代码 hybridastariaps平滑优化obca平滑优化 第一个图是matlab绘制 后面的图是程序用sdl库绘制先看Hybrid A*这个愣头青。这货生成的轨迹就像刚拿驾照的新手&#xff0c;能避开障碍物但轨迹拧巴得很。看看它扩展节点的代码片段&#xff1a; Node3D* expand(…...

Ruby开发工具JetBrains RubyMine

链接&#xff1a;https://pan.quark.cn/s/6d78ff88b12eJetBrains RubyMine是一个全新的为Ruby 和 Rails开发者准备的代码编辑器 &#xff0c;对于Ruby这种比较新兴的编程语言&#xff0c;如果你是Ruby的爱好者&#xff0c;不妨试试使用它作为你的开发工具。软件是建立在IntellJ…...

Python面向对象:封装、继承、多态

作为Python面向对象编程&#xff08;OOP&#xff09;的三大核心特性&#xff0c;封装、继承、多态是从编程新手进阶到熟练开发者的必备知识。它们不是晦涩的理论&#xff0c;而是能让代码更简洁、复用性更强、扩展性更好的实用工具。 一、什么是面向对象&#xff1f; 在讲三大特…...

COMSOL锂枝晶生长仿真模拟:四场耦合(化学场、浓度场、电场、应力场)

comsol锂枝晶生长仿真模拟-应力耦合。 化学场、浓度场、电场、应力场&#xff0c;四场耦合模拟锂枝晶的生长。锂金属负极在固态电池中总爱搞事情&#xff0c;枝晶刺穿隔膜的戏码天天上演。实验室里做破坏性测试成本太高&#xff0c;数值仿真就成了预判枝晶生长路径的透视眼。CO…...

SecGPT-14B+OpenClaw联调指南:解决模型响应超时问题

SecGPT-14BOpenClaw联调指南&#xff1a;解决模型响应超时问题 1. 问题背景与场景定位 上周在尝试用OpenClaw调用SecGPT-14B分析一份12万字的网络安全报告时&#xff0c;遭遇了令人头疼的响应超时问题。这个场景很典型——当我们需要处理长文本安全分析时&#xff0c;模型推理…...

【Pygame】第15章 游戏人工智能基础、行为控制与寻路算法实现

摘要 人工智能是游戏开发中的重要组成部分&#xff0c;它能够赋予非玩家角色更自然的行为表现&#xff0c;使游戏世界显得更加真实、生动&#xff0c;并且具有挑战性。 在 2D 游戏中&#xff0c;AI 通常并不追求真正意义上的“智能”&#xff0c;而是通过一系列规则、状态和算…...

智力能效:Token之上的竞争

AI软件竞争的本质是智力能效的竞争。 编者按 2025 年初, Anthropic 宣布 Claude API的价格比GPT-4高出50%。原本以为会出现的大量客户流失却在六个月后呈现出截然相反的走向&#xff1a;Claude在企业市场的采用率不仅没有下降&#xff0c;反而上升了。 过去两年&#xff0c;无数…...

【网络安全干货】黑客内网渗透零基础入门,超详细基础知识手把手教学

0x01 内网概述 内网也指局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的历程安排、电子邮件和传真通信服务等功能。 内…...

从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合

Vibing Steampunk 这个 GitHub Repository,如果只看名字,很容易让人误以为它只是一个面向 Steampunk,也就是 SAP BTP ABAP environment 的小工具。可一旦把 README、架构文档、CLI 指南和相关实现说明读完,你会发现它的真实定位要大得多:它并不是一个普通的 ABAP 示例项目…...

内网渗透零基础入门教程!小白也能轻松搞懂内网渗透基础知识点

内网渗透初探 | 小白简单学习内网渗透 0x01 基础知识 内网渗透&#xff0c;从字面上理解便是对目标服务器所在内网进行渗透并最终获取域控权限的一种渗透。内网渗透的前提需要获取一个Webshell&#xff0c;可以是低权限的Webshell&#xff0c;因为可以通过提权获取高权限。 …...

OpenClaw邮件处理助手:Qwen3-14b_int4_awq分类与自动回复

OpenClaw邮件处理助手&#xff1a;Qwen3-14b_int4_awq分类与自动回复 1. 为什么需要邮件自动化助手 每天早晨打开邮箱&#xff0c;看到堆积如山的未读邮件总是让人头疼。订阅的新闻简报、工作沟通、广告推广混杂在一起&#xff0c;手动分类和回复消耗了大量时间。作为技术从业…...

LN2266 超小型 低电压启动 PWM 控制 升压 DC/DC 电压调整器

■ 产品概述 LN2266 是一款微型、高效率、升压 DC/DC 调整器。电路由电流模 PWM 控制环路&#xff0c;误差放大器&#xff0c;斜波产生电路&#xff0c;比较器和一个功率开关等模块组成。该芯片可在较宽负载范围内高效稳定的工作。低于 1V 的启动电压&#xff0c;可以使用 1-4节…...

PregelProtocol——定义了“LangChain执行体“最小功能集

1. 配置绑定通过前面的内容我们会发现RunnableConfig这个对象几乎时无所不在&#xff0c;我们在调用Pregel对象的时候可以将它作为参数&#xff0c;用来提供用于控制其执行行为&#xff08;比如迭代限制&#xff0c;并发控制等&#xff09;的配置。执行引擎还将它作为容器用来下…...

线程池项目(1)

推荐去看施磊老师的课程 需要课程或者代码的可以评论,看到会回复的,免费的并发与并行定义并发&#xff1a;多个线程在单核上轮流占用 CPU 时间片&#xff0c;物理上串行执行&#xff0c;但由于时间片较短&#xff0c;看起来像是同时执行。并行&#xff1a;多个线程在多核或多 C…...

Klipper固件全攻略:从配置到优化解决3D打印核心难题

Klipper固件全攻略&#xff1a;从配置到优化解决3D打印核心难题 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper 3D打印技术面临精度不足、振动干扰和配置复杂等挑战&#xff0c;Klipper固件通过…...

YOLOv8n-face人脸检测架构:6MB模型实现92%精度与25ms延迟的企业级方案

YOLOv8n-face人脸检测架构&#xff1a;6MB模型实现92%精度与25ms延迟的企业级方案 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face YOLOv8n-face是基于YOLOv8架构优化的轻量级人脸检测模型…...

【第五周】关键词解释:稀疏自编码器(Sparse Autoencoder,简称 SAE)

&#x1f9e0; 当我们在谈论"理解"大模型时&#xff0c;我们在谈论什么&#xff1f;今天我们要聊的关键词&#xff0c;可能是2024-2025年大模型可解释性领域最炙手可热的技术之一&#xff1a;稀疏自编码器&#xff08;Sparse Autoencoder&#xff0c;简称 SAE&#x…...

ASTM D4169针刺棉手袋的产品有效期验证方案

针刺棉手袋的产品有效期验证&#xff0c;核心是确定产品在正常使用条件下的使用寿命&#xff08;通常以使用次数或年限表示&#xff09;&#xff0c;而不仅仅是物理保质期。 结合你之前关注医疗器械运输验证的背景&#xff0c;这里需强调&#xff1a;针刺棉手袋的“有效期”验…...

JDK-02 | 我为什么越来越喜欢用 Java 的 Text Blocks

这是专栏第 2 篇。 如果第一篇 record 是在“模型表达”上让我轻松,Text Blocks 则是在“日常编码和代码审查”上让我明显省力。 我先给结论:Text Blocks 不只是少写几个 +,它真正解决的是多行文本在代码中的可读性、可评审性和可回归性。 一、我为什么会认真用这个特性 …...

Linux生产环境性能优化:内存优先策略,彻底规避Swap性能损耗

Linux生产环境性能优化&#xff1a;内存优先策略&#xff0c;彻底规避Swap性能损耗 前言 作为深耕企业级运维与安全领域的从业者&#xff0c;我们在Oracle/SAP HANA数据库、VMware虚拟化、K8s云原生集群、PrometheusELK监控体系的生产运维中&#xff0c;最常遇到的性能痛点之一…...

LLM 是怎么学习的?训练过程大揭秘

系列&#xff1a;大语言模型原理科普&#xff08;5 篇&#xff09; 本篇&#xff1a;第 2 篇 难度&#xff1a;⭐⭐ 零基础 浅显技术 字数&#xff1a;约 9000 字 阅读时间&#xff1a;20 分钟&#x1f4d6; 开篇&#xff1a;LLM 不是生来就懂 想象一下&#xff0c;你刚出生的…...

手撕 Transformer (2):嵌入层和位置编码的实现上篇文章讲过,Transformer 可分为四个部分:输入、输出、编码器、解

嵌入层的作用&#xff1a;为了将文本中词汇的数字表示转换为向量表示&#xff08;语义向量&#xff09;&#xff0c;这样后续神经网络就可以对其进行计算了。 1.1 代码实现 import torchimport torch.nn as nnimport mathfrom torch.autograd import Variableclass Embeddings…...

【数字孪生实战案例】如何给电子地图标记点实现三维点位同款的视角切换效果?~山海鲸可视化

在可视化项目中&#xff0c;常规电子地图标记点仅支持基础点位标注&#xff0c;无法联动视角切换&#xff1b;本文讲解如何为地图标记点复刻三维标记的视角跳转能力&#xff0c;实现点击点位即可一键切换预设场景视角。 1.在左侧组件库添加“GIS电子地图&#xff08;基础&#…...

阿姆智创15.6寸工控一体机厂家,源头智造ODM定制方案,赋能SMT产线及设备场景

阿姆智创15.6寸工业触控工控一体机&#xff0c;以强悍硬件性能、丰富工业接口、稳定系统适配与一站式解决方案&#xff0c;深度服务SMT产线、运动控制、机器视觉等工业场景&#xff0c;为设备厂商与制造企业提供高可靠、可定制、易集成的智能控制终端&#xff0c;助力工业自动化…...