数组分成两部分的计算

def fun(nums):
    n = len(nums)
    left_sum = [0] * n
    right_sum = [0] * n
    left_mean = [0] * n
    right_mean = [0] * n
    
    nums.sort() # 是否需要排序?
#     print(nums)
    
    cur_sum = 0
    for i in range(n):
        cur_sum += nums[i]
        left_sum[i] = cur_sum
        left_mean[i] = left_sum[i] / (i + 1)
    
    cur_sum = 0
    for j in range(n - 1, -1, -1):
        cur_sum += nums[j]
        right_sum[j] += cur_sum
        right_mean[j] = right_sum[j] / (n - j)
        
#     print('left_sum', left_sum)
#     print('left_mean', left_mean)
#     print('right_sum', right_sum)
#     print('right_mean', right_mean)
    
    idx = 0
    gap = abs(left_mean[0] - right_mean[1]) # 至少含有两个数
    for k in range(n - 1):
        cur_gap = abs(left_mean[k] - right_mean[k + 1]) # 需要错开一个位置计算
#         print(cur_gap)
        if cur_gap < gap:
            gap = cur_gap
            idx = k
    
    return idx, gap # idx是作为第一部分数组的最后一个值的【下标】

nums = [33, 30, 43, 4, 23, 67, 30, 39, 44]
fun(nums)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值