哈希算法题目:分糖果
字数 798 2025-10-27 00:33:54
哈希算法题目:分糖果
题目描述
给定一个整数数组 candyType,表示糖果的类型。数组中的每个元素代表一颗糖果的类型。你的任务是计算妹妹最多能获得多少种不同类型的糖果,但需要遵循以下规则:她只能吃到 n/2 颗糖果(n 是糖果的总数)。
解题过程
-
理解问题核心
- 糖果总数是 n = candyType.length。
- 妹妹最多可以吃 n/2 颗糖果。
- 目标是让她吃到的糖果类型尽可能多。
- 关键限制:即使糖果类型很多,她最多也只能吃 n/2 颗。
-
关键观察
- 设糖果类型总数为 typeCount(通过哈希集合统计不重复类型)。
- 妹妹能吃的最大糖果数是 n/2。
- 如果 typeCount >= n/2,她最多只能吃到 n/2 种类型(因为最多吃 n/2 颗)。
- 如果 typeCount < n/2,她最多只能吃到 typeCount 种类型(类型数不足)。
- 因此,实际结果是 min(typeCount, n/2)。
-
算法步骤
- 步骤1:遍历数组,用哈希集合存储所有糖果类型。
- 步骤2:计算类型总数 typeCount = 集合大小。
- 步骤3:返回 min(typeCount, n/2)。
-
举例说明
- 示例1:candyType = [1,1,2,2,3,3]
- n = 6,妹妹可吃 3 颗。
- 类型集合 {1,2,3},typeCount = 3。
- min(3, 3) = 3。她能吃到所有3种类型。
- 示例2:candyType = [1,1,2,3]
- n = 4,妹妹可吃 2 颗。
- 类型集合 {1,2,3},typeCount = 3。
- min(3, 2) = 2。她只能吃到2种类型(尽管有3种)。
- 示例1:candyType = [1,1,2,2,3,3]
-
复杂度分析
- 时间复杂度:O(n),遍历数组一次。
- 空间复杂度:O(n),哈希集合存储类型。
总结
通过哈希集合去重统计类型数,再与 n/2 比较取最小值,即可高效解决问题。