Link: https://leetcode.com/problems/check-if-it-is-possible-to-split-array/description/
## 思路
一开始的做法是brute force recursion
但是会TLE
正确思路参考[这里](https://leetcode.com/problems/check-if-it-is-possible-to-split-array/solutions/3869925/java-c-python-easy-and-concise/)
This case is only possible **if there are two consecutive number whose sum is greater than or equal to m**. Because if we have this case then we can simply remove all previous and post numbers one by one. But if this is not present then there is no way we can divide all the elements as at some point we arrive at point where we have three numbers left and non of the two consecutive sum greater than or equal to m.
## Code
```python=
class Solution:
def canSplitArray(self, nums: List[int], m: int) -> bool:
return len(nums)<=2 or any(nums[i]+nums[i+1]>=m for i in range(len(nums)-1))
```
DFS+Memorization TLE
```python=
class Solution:
def canSplitArray(self, nums: List[int], m: int) -> bool:
prefixSum = [0]
for num in nums:
prefixSum.append(prefixSum[-1]+num)
@lru_cache
def canSplit(left, right):
if right-left==0: return True
for i in range(left, right):
if validSubarray(left, i) and validSubarray(i+1, right):
if canSplit(left, i) and canSplit(i+1, right):
return True
return False
def validSubarray(left, right):
return right-left==0 or prefixSum[right+1]-prefixSum[left]>=m
return canSplit(0, len(nums)-1)
```