动态编程-固定大小数组的固定和

亚历山大

这是我遇到的一个问题:

给出了两个整数:N(数组的大小)和S(数组的所有元素的必需总和)

要求以以下方式构造大小为N及其元素之和的数组:

  • 数组包含N个正非零值

  • 向量的元素是不同的

  • 数组中最大和最小元素之间的绝对差很小

  • 如果此绝对差相等的解多于1个,则将显示最小词典解。

我实在无法解决问题。任何帮助将是可爱的。

范·邓格(Pham Trung)

前N个正值{1,2,3 ... N)的总和为 (N + 1)*N/2

因此,我们可以轻松得出N个连续正数之和的公式(从开始a

((N + a - 1) + a)*N/2 = (N + 2*a - 1)*N/2

使用二进制搜索,我们可以找到起始编号为a且总和<= S的N个连续数字

因此,让dif = S - (N + 2*a - 1)*N/2->这样最后一个dif数字应加1,其余N - dif数字为N - dif + a, ..., a

伪代码

int start = 1;
int end = S;
int result = 1;
while(start <= end){
    int mid = (start + end)/2;
    int sum = sum(mid);   
    if(sum <= S){
       result = max(mid,result); 
       start = mid + 1;
    }else{
       end = mid - 1;
    } 
}
//So we know that the sequence starting at result
//Now we need to find the diff
int dif = S - sum(result);

for(int i = 0; i < N; i++){
   if(i >= N - dif ){//last N - dif number is added one
      print (i + result + 1);

   }else{
      print (i + result);
   }
}

int sum(int a){//Return sum from a to N + a - 1
    return (N +2*a - 1)*N/2     
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

递归和动态编程

来自分类Dev

固定大小的动态GridLayout

来自分类Dev

如何动态分配固定的运行时大小的数组?

来自分类Dev

C(动态)阵列(固定大小)

来自分类Dev

堆上对象和子对象的固定大小数组

来自分类Dev

通过线程实现动态编程算法来固定

来自分类Dev

动态和固定宽度的CSS

来自分类Dev

临时/“不可寻址”的固定大小数组?

来自分类Dev

打字稿:固定大小数组的接口

来自分类Dev

打字稿:固定大小数组的接口

来自分类Dev

可以用作固定大小(堆栈)和动态大小(堆)的阵列封装器

来自分类Dev

数组的总和-动态编程-需要修复

来自分类Dev

动态编程,带约束的最大子数组

来自分类Dev

动态编程-最小化数组的总和

来自分类Dev

数组的总和-动态编程-需要修复

来自分类Dev

使用一维数组的LCS动态编程

来自分类Dev

0/1背包和动态编程

来自分类Dev

0/1背包和动态编程

来自分类Dev

动态和以编程方式创建布局

来自分类Dev

UITableView具有动态大小的固定部分

来自分类Dev

将数组拆分为具有动态大小的固定 n 个块

来自分类Dev

在C编程的递归函数中更新了动态列和行大小的2D数组

来自分类Dev

数组中的Javascript功能编程和动态值

来自分类Dev

如何将UIScrollView内容大小配置为具有固定宽度和动态高度?

来自分类Dev

每次以固定常数增长动态数组的效率?

来自分类Dev

返回指向固定大小数组的数组的指针C ++

来自分类Dev

JPanel中行的动态宽度和固定高度

来自分类Dev

C中的动态大小数组

来自分类Dev

如何以编程方式在TableViewCell中设置固定的ImageView大小?