1 - 1
2 - 2,3
3 - 4,5,6
4 - 7,8,9,10
给定4到6之间的任何数字,我需要输出为3。
给定7到10之间的任何数字,我需要输出为4。
我需要解决上述问题的最快解决方案来解决算法。
我能想到的是强力算法:
鉴于7:
n-square + n = 7*2 = 14
1 + 1 = 2 < 14
4 + 2 = 6 < 14
9 + 3 = 12 < 14
16+ 4 = 20 >=14 --> So 4
有没有更好的方法来达成解决方案?或者我对算法本身的方法存在缺陷?
算法的简要说明:
A,B,C
每次迭代后,每个元素都会增加一个。
A,A,B,B,C,C
给定3,将返回C.
给定4或5,将返回A.
鉴于6或7,将返回B.
给定8或9,将返回C.
给定10或11或12,将返回A.
鉴于13或14或15,将返回B.
数学问题的解决方案如何帮助解决算法:
Total number of elements = 3
Given number = 13 (Output to be B)
Divide and Ceiling = Ceil (13/3) = 5 [So 13 falls under when every element has become * 3] (From Mathematical problem : If given number is 5, 3 is to be used)
Starting index of when every element has become * 3 [IS_EQUAL_TO = ] 3 * 3(summation of previous iteration => 1 + 2) + 1 = 10
To Find the index = Ceil(13-10+1/3 (this 3,comes from the mathematical problem) ) = Ceil (4/3) = 2nd index = B
答案 0 :(得分:3)
给定行数N,三角形的大小为N(N + 1)/ 2。您基本上试图找到最小整数N,使得N(N + 1)/ 2> = M,其中给出M.如果你有一个计算平方根的函数,你可以在恒定的时间内解决这个等式。
N(N + 1)/ 2> = M,将两侧乘以2,
N 2 + N> = 2M,完成正方形,取平方根,blablabla
N> = sqrt(2M + 1/4)-1/2
因此答案是N = ceil(sqrt(2*M + .25) - .5)