题目链接:和为目标值的最大数目不重叠非空子数组数目
题意:
给你一个数组 nums
和一个整数 target
。
请你返回 非空不重叠 子数组的最大数目,且每个子数组中数字和都为 target
。
解题思路:
使用前缀和,将其放入数组中 ,然后依次判断sum-target是否在数组中,如果有,那么ans++,清空数组(目的是为了不重叠)。
代码:
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer
*/
function maxNonOverlapping($nums, $target) {
$a[0] = 0;
$sum = 0; $ans = 0;
$len = count($nums);
for($i = 0; $i < $len; $i++){
$sum += $nums[$i]; // 总和
if(in_array($sum - $target, $a)){
$ans++;
$a = array(); // 清空数组
}
$a[] = $sum; // 将前缀和放在数组中
}
return $ans;
}
}