Kotlin函数未通过Hyperskill测试:集合元素筛选问题排查
问题分析与修复
首先你完全理解错了题目要求!题目说的是返回第一个集合中是第二个集合大小的倍数的元素,也就是拿第二个集合的元素个数(second.size)作为除数,找第一个集合里能被这个数整除的元素;但你的代码写的是检查第一个集合的元素是否能被第二个集合里的每一个元素整除,这完全是两回事。
你的代码存在的具体问题
- 核心逻辑偏离题目:把“集合的大小”当成了“集合中的每个元素”,这是最致命的错误
- Set是无序集合,调用
second.last()的结果不确定,不同环境运行可能得到不同结果,测试用例肯定过不了 - 冗余代码:
finalSet变量完全多余,直接返回tempSet即可;isDiv变量从头到尾没起到实际作用 - 错误的中断逻辑:只要第二个集合里有一个元素不能整除当前元素就break,但这不是题目要求的逻辑
修复后的代码
fun solution(first: Set<Int>, second: Set<Int>): Set<Int> { val secondSize = second.size // 处理第二个集合为空的情况,避免除以0 return if (secondSize == 0) { emptySet() } else { first.filter { it % secondSize == 0 }.toSet() } }
代码说明
- 先获取第二个集合的大小
secondSize - 处理边界情况:如果第二个集合为空,直接返回空集(避免除以0的异常)
- 用
filter过滤第一个集合中能被secondSize整除的元素,最后转成Set返回
内容的提问来源于stack exchange,提问作者sievy
相关产品推荐
相关产品推荐

