Joe*_*oey 5 arrays algorithm math
给定一个由 N 个整数组成的循环数组(即 A[0] 和 A[N - 1] 彼此相邻),可以形成总和为偶数的相邻对的最大数量是多少?请注意,每个元素最多可以属于一对。
例如,如果我们有 [5, 7, 9, 6, 3],那么您应该将 (5, 3) 和 (7, 9) 配对以获得答案 2。另外,如果我们有 [1, 1, 1, 1, 1, 1],那么答案是 3(将每个相邻元素配对而不环绕)
这是我最近面试时遇到的一个问题,至今还解决不了(没有得到这份工作)。我知道两个具有相同奇偶校验的数字之和会产生一个偶数和(奇数和奇数,或者偶数和偶数),但整个“环绕”部分才是让我着迷的地方。特别是,我无法确定将一个值与其左邻居或右邻居配对是否是最佳选择。目前我想到的算法如下:
对于每个索引 0 <= i <= n - 1,尝试通过检查奇偶性将 A[i] 与 A[i + 1] 配对。
如果 A[0] 和 A[n-1] 最后都未配对,则如果它们具有相同的奇偶校验,则将它们配对。
这是一个错误的算法,因为它对于 [1, 1, 1, 0, 1] 失败,在这种情况下,最好将 A[0] 与 A[n-1] 配对,将 A[1] 与 A[2] 配对。有没有人有什么建议?我在想也许是动态规划的一些东西,但我不确定。圆形部分真的让我很失望。
谢谢。
如果所有数字都是奇数,或者所有数字都是偶数,那么
如果同时存在奇数和偶数,则可以将数组分为奇数游和偶数游。如果第一次和最后一次都是偶数或都是奇数,则将它们连接起来。分别解决每次运行的问题。这很容易,因为运行不是圆形的。如果游程的长度是偶数,则包括所有数字。否则,排除偶数位置上的最小数字。
这假设所有数字都是非负数。