【发布时间】:2022-01-05 18:44:25
【问题描述】:
我正在尝试使用递归来解决 Codility 中的 OddOccurrencesInArray 问题,其中
- 给定一个包含 N 个元素的数组,N 总是奇数
- 数组中除一个以外的所有元素的出现次数均为偶数
- 我们需要编写返回一个未配对值的代码
例如,如果给定的数组是 [9, 3, 9, 3, 7, 9, 9],则代码必须返回 7,因为这是数组中唯一未配对的元素。
我的解决方案伪代码/思考过程是:
- 对数组进行排序
- 如果前两个元素彼此相等,则删除它们并在减去前两个元素的数组上再次递归运行求解算法(排序后),即如果未找到未配对的元素,我们会继续减小数组
- 如果前两个元素不相等,则数组的第一个元素必须是未配对项
我的实现是:
def solution(A):
# write your code in Python 3.6
if len(A) > 1:
A = sorted(A)
if A[0] != A[1]:
return A[0]
else:
solution(A[2:])
else:
return A[0]
我不断收到错误消息
结果类型无效,应为 int,找到
谁能帮我弄清楚这意味着什么以及如何纠正它?从算法上讲,我认为我的解决方案是合理的,但我不明白为什么它没有返回我指定的整数值。
【问题讨论】:
-
递归对于这个问题来说太过分了;循环排序数组就足够了。如果您跟踪未配对的值,您也可以避免排序。
-
一看你忘了在代码中return solution(A[2:])
-
@ScottHunter 除了对所有数字进行异或运算之外,其他任何事情都是多余的。
标签: python arrays recursion nonetype