我有一个数组,其中包含按排序顺序排列的数字。 我得到一个数字,并要求将其表示为数组中连续数字的总和。我该怎么做?
例如,考虑一个数组
var retrievedObject = localStorage.getItem('nameOfMyValue');
和一个数字,比如41。 它可以表示为以下
arr={2,3,5,7,11,13,17,19,23,29,31,37,41}
如果是数字15,则应表示为
2+3+5+7+11+13
我需要一个算法/代码来有效地找到所有这些值。
答案 0 :(得分:0)
让x
成为我们搜索总和的数字:
arr={2,3,5,7,11,13,17,19,23,29,31,37,41}
l=0 // index from where to start sum up (l left)
r=0 // index until where to sum up (r right)
label:
sum=arr[l]+...arr[r]
if(sum==x)
return (l,r);
if(sum<x)
r++
if(sum>x)
l++
goto label
当无法找到总和时,您需要添加一些条件来处理案例。
Visually explained example: x=36
{2,3,5,7,11,13,17,19,23,29,31,37,41}
() sum = 2 l=0 r=0
( ) sum = 5 l=0 r=1
( ) sum = 10 l=0 r=2
( ) sum = 17 l=0 r=3
( ) sum = 28 l=0 r=4
( ) sum = 41 l=0 r=5
( ) sum = 39 l=1 r=5
( ) sum = 36 l=2 r=5 -> return (2,5)
Result arr[2]+...+arr[5] = 36