如何将数字表示为数组中连续数字的总和

时间:2016-07-29 14:30:51

标签: arrays algorithm sequences

我有一个数组,其中包含按排序顺序排列的数字。 我得到一个数字,并要求将其表示为数组中连续数字的总和。我该怎么做?

例如,考虑一个数组

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

我需要一个算法/代码来有效地找到所有这些值。

1 个答案:

答案 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