Python Codingbat balance_point:如何入门

时间:2017-08-05 20:46:45

标签: python point balance

我有一个编码蝙蝠挑战,我需要完成,并已经在这里寻找解决方案或任何其他建议,并且找不到任何建议。

以下是挑战: "平衡点"是可以拆分值列表数组的点,以便一侧的数字总和等于另一侧的数字之和。 (平衡点包含在"第二个"子列表中。)给定一个非空的整数列表,如果给定列表没有平衡点,则返回平衡点,或-1。 / p>

balance_point([1, 1, 1, 2, 1]) → 3
balance_point([2, 1, 1, 2, 1]) → -1
balance_point([10, 10]) → 1

我想将列表分成两部分并对每个部分求和,然后比较总和。但是,我怎么知道在哪里拆分列表?如何从左侧和右侧对这些数字求和?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

基本情况:如果列表的大小小于2则返回-1

设置

  • 让s R 为右子列表的总和, R 是列表 n-1 中最后一项的索引。将s R 设置为索引 n-1
  • 中项目的值
  • 设s L 是左子列表的总和, L 是列表 0 中第一项的索引。将s L 设置为索引 0的项目值

算法:

  1. if s R < s L AND R-1 大于 L ,然后添加值在索引 R-1 到s R 并将 R 设置为 R-1

  2. if s L < s R AND L + 1 小于 R ,然后添加值在索引 L + 1 到s L 并将 L 设置为 L + 1

  3. 如果 s L = s R AND L + 1 小于 R-1 ,将 R 设置为 R-1 并设置 L L + 1 ,然后重复步骤1-2

  4. 重复步骤1-3,直到所有条件都为假

  5. 答案:

    如果s L = s R ,则返回 R ,否则返回 -1