适龄的朋友-LeetCode
825. 适龄的朋友 🎯 问题描述(来源于LeetCode) 描述: 在社交媒体网站上有 n 个用户。给你一个整数数组 ages,其中 ages[i] 是第 i 个用户的年龄。 如果满足以下任意条件,则用户 x 不会向用户 y(x != y)发送好友请求: age[y] <= 0.5 * age[x] + 7 age[y] > age[x] age[y] > 100 && age[x] < 100 否则,x 会向 y 发送好友请求。 注意:如果 x 向 y 发送请求,不一定意味着 y 也会向 x 发送请求。 返回总共发出的好友请求数目。 说明: 年龄范围在 1 到 120 之间。 n 最大为 2 * 10^4。 示例: 示例 1: 123输入: ages = [16,16]输出: 2解释: 两人年龄相同,16 > 0.5*16+7 = 15,条件不成立,所以互相发送请求,共2个。 示例 2: 123输入: ages = [16,17,18]输出: 2解释: 只有18向17和16发送请求?实际计算为2。 💻 解...
乘积小于 K 的子数组-LeetCode
713. 乘积小于 K 的子数组 🎯 问题描述(来源于LeetCode) 描述: 给定一个正整数数组 nums 和一个整数 k,请找出该数组内乘积小于 k 的连续子数组的个数。 说明: 子数组必须连续。 数组元素均为正整数。 如果 k <= 1,由于所有正整数乘积 ≥ 1,所以没有子数组满足条件,直接返回 0。 示例: 示例 1: 123输入: nums = [10,5,2,6], k = 100输出: 8解释: 8 个乘积小于 100 的子数组分别为:[10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。注意 [10,5,2] 的乘积为 100,不符合要求。 示例 2: 12输入: nums = [1,2,3], k = 0输出: 0 💻 解题思路 思路:滑动窗口(双指针) 算法步骤 若 k <= 1,直接返回 0(因为所有元素为正,乘积至少为 1,不可能小于 1)。 初始化左指针 left = 0,当前乘积 prod = 1,答案 ans = 0。 遍历右指针 right 从 0 到 n-...
统计满足 K 约束的子字符串数量-LeetCode
3258. 统计满足 K 约束的子字符串数量 🎯 问题描述(来源于LeetCode) 描述: 给定一个二进制字符串 s 和一个整数 k。 如果一个子串满足以下条件之一,则称该子串符合 K 约束: 子串中 0 的个数不超过 k; 子串中 1 的个数不超过 k。 请返回符合 K 约束的子串总数。 说明: 子串是连续的。 字符串长度 1 <= s.length <= 50(对于本解法,滑动窗口可处理更大规模)。 示例: 示例 1: 123输入: s = "10101", k = 1输出: 12解释: 所有 15 个子串中,只有 "101", "0101", "1010", "10101" 不符合(因为 0 和 1 的个数都 > 1),其余 12 个符合。 示例 2: 12输入: s = "1010101", k = 2输出: 25 💻 解题思路 思路:滑动窗口(双指针) 算法步骤 将字符串转为数字列表,便于操作(ch ...
不同元素和至少为 K 的最短子数组长度-LeetCode
3795. 不同元素和至少为 K 的最短子数组长度 🎯 问题描述(来源于LeetCode) 描述: 给定一个整数数组 nums 和一个整数 k。你需要找一个连续的非空子数组,使得该子数组中不同元素的和(即去重后的元素之和)至少为 k。 返回满足条件的最短子数组长度。如果不存在这样的子数组,返回 -1。 说明: 子数组必须连续。 求和时,重复出现的元素只计算一次。 子数组中可以包含重复元素。 示例: 示例 1: 123输入: nums = [1,2,3,1,1], k = 5输出: 3解释: 子数组 [1,2,3] 的不同元素和为 1+2+3=6 ≥ 5,长度为 3。 示例 2: 123输入: nums = [2,3,1,2,4,3], k = 7输出: 3解释: 子数组 [2,3,1] 的不同元素和为 2+3+1=6 < 7;[2,3,1,2] 的不同元素和为 2+3+1=6 < 7;[3,1,2,4] 的不同元素和为 3+1+2+4=10 ≥ 7,长度为 4;[1,2,4] 的不同元素和为 1+2+4=7 ≥ 7,长度为 3,是最短的。 示例 3...
长度最小的子数组-LeetCode
209. 长度最小的子数组 - Minimum Size Subarray Sum 🎯 问题描述(来源于LeetCode) 描述: 给定一个含有 n 个正整数的数组 nums 和一个正整数 target。 找出该数组中满足其和 ≥ target 的长度最小的连续子数组,并返回其长度。 如果不存在符合条件的子数组,返回 0。 说明: 子数组是连续的。 所有元素均为正整数。 示例: 示例 1: 123输入: target = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 的长度为 2,其和为 7,是最短的。 示例 2: 12输入: target = 4, nums = [1,4,4]输出: 1 示例 3: 12输入: target = 11, nums = [1,1,1,1,1,1,1,1]输出: 0 💻 解题思路 思路:滑动窗口(双指针) 算法步骤 初始化左指针 left = 0,当前窗口和 cur_sum = 0,最小长度 min_len = inf。 右指针 right 从 0 到 n-1 遍历: 将 nu...
不同路径 II-LeetCode
63. 不同路径 II - Unique Paths II 🎯 问题描述(来源于LeetCode) 描述: 一个机器人位于一个 m x n 网格的左上角(起点为 (0,0))。机器人每次只能向下或向右移动一步。 网格中可能存在障碍物,用 1 表示有障碍物,0 表示空地。 问机器人到达右下角 (m-1, n-1) 有多少条不同的路径? 如果障碍物阻挡了路径,则返回 0。 说明: 1 <= m, n <= 100。 障碍物和空地的数量任意。 示例: 示例 1: 123输入: obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出: 2解释: 从起点到终点,中间的障碍物使得只有两条路径。 示例 2: 12输入: obstacleGrid = [[0,1],[0,0]]输出: 1 💻 解题思路 思路:动态规划(1‑based 数组 + 巧妙初始化) 算法步骤 获取网格尺寸 m, n,创建 (m+1) x (n+1) 的 DP 数组,全部初始化为 0。 设置 dp[0][1] = 1,这相当于把起点的路径数“预先放置”在...
不同路径-LeetCode
62. 不同路径 - Unique Paths 🎯 问题描述(来源于LeetCode) 描述: 一个机器人位于一个 m x n 网格的左上角(起点为 (0,0))。机器人每次只能向下或向右移动一步。 问机器人到达右下角 (m-1, n-1) 有多少条不同的路径? 说明: 1 <= m, n <= 100。 题目保证答案在 32 位整数范围内。 示例: 示例 1: 12输入: m = 3, n = 7输出: 28 示例 2: 123输入: m = 3, n = 2输出: 3解释: 从左上角到右下角,一共 3 条路径:右→下→下,下→右→下,下→下→右。 💻 解题思路 思路:动态规划(1‑based 数组) 算法步骤 创建 (m+1) x (n+1) 的二维数组 dp,全部初始化为 0。 遍历 i 从 0 到 m-1,j 从 0 到 n-1: 如果 i == 0 and j == 0,则 dp[1][1] = 1(起点)。 否则,dp[i+1][j+1] = dp[i][j+1] + dp[i+1][j]。 最后返回 dp[m][n]。 ...
打家劫舍V-LeetCode
3840. 打家劫舍 V - House Robber V 🎯 问题描述(来源于LeetCode) 描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,每间房还有一个颜色代码。 与传统的打家劫舍不同,本题的限制为:相邻且颜色相同的房屋不能在同一晚上被偷。 即:如果两间相邻的房屋颜色不同,则可以同时偷窃;如果颜色相同,则不能同时偷窃。 给定两个数组 nums(金额)和 colors(颜色),返回不触发警报的情况下能偷窃到的最大金额。 说明: 相邻房屋之间只有颜色相同时才有额外限制。 数组长度 1 <= n <= 10^5。 示例: 示例 1: 123输入: nums = [1,4,3,5], colors = [1,1,2,2]输出: 9解释: 偷第1间(4)和第3间(5),不相邻,金额=9。 示例 2: 123输入: nums = [3,1,2,4], colors = [2,3,2,2]输出: 8解释: 偷第0间(3)、第1间(1)、第3间(4),相邻且颜色不同(3和1不同)允许,总金额=8。 💻 解题思路 思路:动态规...
找到最大开销的子字符串-LeetCode
2606. 找到最大开销的子字符串 🎯 问题描述(来源于LeetCode) 描述: 给你一个字符串 s,一个字符数组 chars 和一个整数数组 vals,其中 chars[i] 对应的权值为 vals[i]。 对于未出现在 chars 中的字符,其权值为它在字母表中的位置('a' 为 1,'b' 为 2,…,'z' 为 26)。 定义子串的开销为子串中所有字符的权值之和。要求返回 s 的所有子串中的最大开销。 注意,空子串的开销为 0。 说明: 子串是连续的。 若所有子串的开销均为负数,则答案为 0(即选择空子串)。 示例: 示例 1: 123输入: s = "adaa", chars = "d", vals = [-1000]输出: 2解释: 字符 'd' 的权值为 -1000,'a' 的权值为 1。最佳子串为 "aa",开销 = 1+1=2。 示例 2: 123输入: s = "abc", chars = "abc",...
智琴云钢琴学习平台软件需求规格说明书
智琴云钢琴学习平台软件需求规格说明书 1. 引言 1.1 编写目的 本文档按照《计算机软件文档编制规范》GB/T 8567-2006 的软件需求规格说明书编写思路,对钢琴学习平台的需求获取过程、功能性需求、非功能性需求、用例模型、顺序图、类图和状态图进行说明,为后续系统设计、编码实现、测试验收和项目答辩提供依据。 1.2 项目背景 传统钢琴学习主要依赖线下授课和人工陪练,存在时间地点受限、练习监督成本高、学习反馈不及时、学习资源分散等问题。随着在线教育、音视频通信和音频识别技术的发展,建设一个面向钢琴学习者、教师、家长和管理员的一体化平台具有可行性和实际价值。 1.3 项目范围 本系统面向钢琴学习全过程,提供用户管理、曲库乐谱、智能陪练评分、课程约课、教学资源、社区交流、学习监督和后台管理等功能。系统重点解决“如何练习、如何评价、如何监督、如何教学、如何交流”的问题。 1.4 参考资料 《计算机软件文档编制规范》GB/T 8567-2006。 本项目《可行性分析报告》。 1.5 术语和缩略语 术语 说明 学生 使用平台进行钢琴学习、练习、评分和约课...












