【问题标题】:Least Continuous Sum of an Array given a Range给定范围的数组的最小连续和
【发布时间】:2020-07-11 13:34:07
【问题描述】:

我在编写这个算法时遇到了麻烦,但我认为我很好地掌握了它,但一直失败。该算法应该返回给定范围的数组的最小连续和。例如,假设数组是这样的:[1, 3, 4, 2, -1, 5, -1, 1]。该函数接收一个范围。对于此示例,假设范围为 3。目标是找到总和最小的 3 个连续元素。在上面的示例中,它将是 3。因为 -1 + 5 + -1 是给出最小总和的 3 个连续元素。

算法伪代码:

def least_sum_search(length,dictionary):
least_sum = 0
max_range = 283
for i in dictionary:
    sum = 0
    look_ahead = length
    index = i
    if i + length > max_range:
        break
    while(look_ahead > 0):
        sum += dictionary[index]['price']
        index += 1
        look_ahead -= 1
    if(least_sum > sum):
        least_sum = sum
return least_sum

你们会怎么写这个算法?我个人认为我想多了。 感谢阅读!

【问题讨论】:

    标签: arrays algorithm range min


    【解决方案1】:

    假设您有一个 K 范围。您可以保留 K 个元素的滑动窗口并遍历数组,在每次迭代时添加第 i 个元素并删除第 i-K 个元素,并保持运行最小值。如下:

    def get_min_range(N,K,arr):
        running_sum = sum(arr[:K])
        ans = running_sum
        for i in range(K,N):
            running_sum += arr[i]
            running_sum -= arr[i-K]
            ans = min(running_sum, ans)
        return ans
    
    print get_min_range(5,3,[1,2,3,4,5])
    

    这忽略了K > N 的边缘情况,但您可以随心所欲地处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多