algorithm - 你如何找到 N 个整数,使得它们的总和等于 M?
问题描述
你如何找到 N 个不同整数的任何可能组合,使得它们的总和等于给定的整数 M?
整数可以在 -2^31 到 2^31 之间,N 小于或等于 500000,M 也在 -2^31 到 2^31 之间。
一个例子:
- 4 表示为 N,8 表示为 M。
- 可能的组合是 3, -1, 4, 2
解决方案
假设N
是奇怪的。我们可以选择N/2
不是 M 的正整数。我们也可以选择那些整数的负数。最后,我们选择M
。例如,如果N = 5
和M = 9
,我们可以选择2, -2, 4, -4
。然后我们简单地选择9
,作为我们的最终整数,给我们一个总和M
。
假设N
是偶数。我们可以使用类似的系统,但选择N/2-1
正整数和负整数,0
然后M
。所以对于N = 6
, M = 11
, 我们可以选择5, -5, 6, -6, 0, 11
总和11
。
这些选择不是唯一的,但简单地选择连续的整数是微不足道的。
推荐阅读
- join - 谷歌表数组公式+加入+过滤
- ios - 为什么 .foregroundColor 属性不适用于 NSMutableAttributedString?
- ruby-on-rails - 如何验证rails中的时间戳?
- php - 比较关联数组中foreach循环内的下一个元素
- javascript - 在函数内调用文件的内容
- python - 如何在同一轴上自动将多个颜色条彼此相邻放置
- javascript - 如何从此嵌套对象数组中获取最大的 category_id?
- material-ui - 如果它被全局设置覆盖,如何强制执行 MUI 样式?
- c - gtk/gtk.h:没有这样的文件或目录 Windows
- c++ - 从“name”、number 到模板处理函数的高效调度