小编sdr*_*tui的帖子

在这种情况下,如何找到数组的最小索引?

给我们一个带有n值的数组。

例: [1,4,5,6,6]

对于i数组的每个索引a,我们构造一个数组的新元素,b这样,

b[i]= [a[i]/1] + [a[i+1]/2] + [a[i+2]/3] + ? + [a[n]/(n?i+1)] 其中 [.]表示最大整数函数。

我们也得到一个整数k

我们必须找到最小的i这样b[i] ? k

我知道暴力破解O(n^2)算法(创建数组-'b'),有人可以建议更好的时间复杂度和解决方法吗?

例如,对于输入[1,2,3]k=3输出为1(minimum-index)

这里, a[1]=1; a[2]=2; a[3]=3;

现在, b[1] = [a[1]/1] + [a[2]/2] + [a[3]/3] = [1/1] + [2/2] + [3/3] = 3;

b[2] = [a[2]/1] + [a[3]/2] = [2/1] + [3/2] = 3;

b[3] = [a[3]/1] = …

algorithm dynamic-programming

5
推荐指数
0
解决办法
423
查看次数

最大化一个分区的GCD(最大公约数)之和?

给定一个正数数组。我想将数组拆分为2个不同的子集,以使它们的gcd(最大公约数)的总和最大。

数组示例:{6,7,6,7}

答案:两个必需的子集是:{6,6}{7,7}; 它们各自的gcd是6和7,它们的sum = 6+7=13;这是最大可能的gcd总和。

GCD:的GCD {8,12}{4}作为图4是其将8以及12中的最大数目。

注意:gcd(X)=X如果子集仅包含一个元素。

我的方法:通过暴力破解,找到数组的所有可能子序列,然后找到最大和,但是如果输入大小大于30个数字,则此方法不起作用。我正在寻找一种更有效的方法。

额外:任何输入数字的最大大小为10 ^ 9,时间限制:-1s似乎不错,输入大小可能高达10 ^ 5

c++ greatest-common-divisor

5
推荐指数
1
解决办法
3621
查看次数

如何通过删除子树来最大化树的权重

有一棵有N个节点(编号1到N)的根树。节点“ 1”是根。每个节点都有一个值;让我们用A(i)表示节点i的值。

可以多次执行以下操作(包括零次):

1.选择树中仍然存在的任何节点,并删除该节点的整个子树,包括它本身。

2.让我们将利润定义为树中当前存在的所有节点的值之和减去X?k,其中k表示执行此操作的次数。找到最大可能的利润。

我们如何在这里计算“ k”值?(意味着删除时间节点数以获取最佳利润)

例:-


3(number of nodes,N) ,

5(X)

1 -5 -10 (Values of corresponding nodes)

(edge(s) from 'x'->'y')

1 2

2 3

Output: -4

We remove the sub-tree of node : 2'.

Now,value of our tree is: 1.

Finals answer:- 1-(x)*k,
(k=1); as we have performed the operation of removing the sub-tree only '1' time 
:  1-(5)*1= -4.
Run Code Online (Sandbox Code Playgroud)

注意:没有给出树应该是二进制的,它也可以是普通树。

binary-tree subtree

-3
推荐指数
1
解决办法
1420
查看次数