当前位置: 首页 > 知识库问答 >
问题:

合并两个数组,使所有奇数之和最大

莘羽
2023-03-14

我有一个问题,给你两个数组,比如:

5 3
10 12 6 14 7
1 8 2

这意味着第一个数组中有5个数字,第二个数组中有3个数字。第二行是第一个数组,第三行是第二个数组。这个程序的目标是将第二个数组中的数字插入第一个数组(可以分开),从而使组合数组的所有位置都是奇数(第一、第三、第五……)数字加起来就是可能的最大数字。上述问题的输出示例:

44

既然阵列变成了

10 1 12 2 8 6 14 7
10+12+8+14=44

我试图利用第一个数组中的差异,通过

int[] diff=new int[numberinarray-1];
for(int i=0;i<numbersinarray-1;i++)
{
    diff[i]=firstarray[i]-firstarray[i+1];
}

并找到差异最大的地方在第二个数组中插入数字。但这种方式似乎非常无效,我仍然不确定如何真正做到这一点。我想知道有没有更简单、更高效的方法来做这道题。

共有1个答案

胡元忠
2023-03-14

为了将其表述为动态程序,我们可以将其视为从左到右合并两个数组。在每个步骤中,算法必须选择选择第一或第二列表的头部。假设两个输入序列是ab,让S(i, j)是输出中奇数索引元素的总和,其中ia的下一个可用元素>而jb的下一个。然后呢

S(i,j) = if i+j is odd then max(a[i] + S(i-1,j), b[j] + S(i,j-1))
         else max(S(i-1,j), S(i,j-1)

i j是所选输出位置的索引。

基本情况如下:

S(0,j) = if j is odd then b[j] + S(0,j-1) else S(0,j-1) [j>0]
S(i,0) = if i is odd then a[i] + S(i-1,0) else S(i-1,0) [i>0]
S(0,0) = max(S(0,1), S(1,0))
 类似资料:
  • 问题内容: 我有两个像这样的数组: 我想结合这两个数组,使其不包含重复项,并保留其原始键。例如,输出应为: 我已经尝试过了,但是它正在更改其原始键: 有什么办法吗? 问题答案: 只需使用: 那应该解决。因为如果一个键出现多次(例如在您的示例中),则使用字符串键,因此一个键将覆盖具有相同名称的处理键。因为在您的情况下,它们两者都具有相同的值,但这无关紧要,并且还会删除重复项。 更新:我刚刚意识到,P

  • 问题内容: 我有两个数组,我想将这两个数组合并为一个数组。请查看以下详细信息: 第一个数组: 第二个数组: 我想要这个结果。有人知道该怎么做吗? 希望你理解这个问题。先感谢您。 问题答案: 已修正 (再次) 接受无限数量的输入数组,将所有子数组作为索引数组合并到一个容器中,然后返回结果。 编辑03/2014: 提高可读性和效率

  • 问题内容: 我试图在尝试对6参数函数进行任何复杂操作之前,遍历6参数函数的参数空间,以研究其数值行为,因此,我正在寻找一种有效的方法来执行此操作。 我的函数将6-dim numpy数组中给出的浮点值作为输入。我最初尝试做的是: 首先,我创建了一个函数,该函数接受2个数组并生成一个包含两个数组中值的所有组合的数组: 然后,我曾经将其应用于同一数组的m个副本: 最后,我这样评估我的功能: 这工作,但它

  • 使用MongoDB 3.4。10和猫鼬4.13。6我能够计算用户模型上两个阵列的大小: 我的用户所在的位置(per) {“_id”:ObjectId(“5a2b21e63023c6117085c240”),“右投票”:[2],“左投票”:[1,6]} {“_id”:ObjectId(“5a2c0d68efde3416bc8b7020”),“右投票”:[2],“左投票”:[1]} 在这里,我得到了预

  • 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,

  • 给定一个整数数组,我必须找到具有最大和的子数组,使得和是奇数。 但是我怎么把它扩展到和是奇数。 编辑 数组的所有元素都是整数和正数