LintCode问题图解-6

本文准备讲解1个算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读者可以阅读笔者文章(在线编程平台推荐-LeetCode)。问题的英文版本描述如下:

Minimum Subarray

Given an array of integers, find the subarray with smallest sum.

Return the sum of the subarray.

Notice

The subarray should contain one integer at least.

Example

For[1, -1, -2, 1], return -3.

问题的中文版本描述:

最小子数组

给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。

Notice

子数组最少包含一个数字

Example

给出数组[1, -1, -2, 1],返回 -3

这个问题可以选用最简单的全路径排列方法:对数组[1, -1, -2, 1],含有首数据1的所有新增可能路径为[1],[1,-1],[1,-1,-2]和[1,-1,-2,1]; 含有数据-1的所有可能新增路径为[-1],[-1,-2],[-1,-2,1];含有数据-2的所有新增可能路径为[-2],[-2,1]; 含有数据1的所有新增可能路径为[1];对每个可能路径计算处理可得出最小和。


LintCode问题图解-6_第1张图片
全路径算法

标准算法需要对目标数组做特殊的计算处理。使用变量 localmin1 记录前节点参于的最低和,使用变量 localmin 记录本节点参于的最低和,使用变量 globalmin 记录最低和。对数组[1, -1, -1, 1],首数据1节点:localmin1 为 0,localmin 为1,globalmin 为1;数据-1节点:localmin1 为 1,localmin 为 -1,globalmin 为 -1;数据-1节点:localmin1 为 -1,localmin 为-2,globalmin 为-2;数据1节点:localmin1 为 -2,localmin 为-1,globalmin 为-2。该算法难度稍高,但效率比较高。


LintCode问题图解-6_第2张图片
标准的算法

你可能感兴趣的:(LintCode问题图解-6)