【LeetCode每日一题】2270.分割数组的方案数

https://leetcode.cn/problems/number-of-ways-to-split-array/description/

题目:

给定一个数组,从 下标为 index 的地方切开,左边的数大于右边,保证右边至少有一个数。

思路一:

  • 遍历数组,用prefixArr 记录每个元素的前缀和。
  • 再遍历 prefixArr。
    • index 最大只能取到 prefix.length -2。 因为要保证右边至少有一个数。
    • 左边的数(prefixArr) ≥ 右边的数(prefixArr[prefixArr.length-1]-preArr[i])
js 复制代码
/**
 * @param {number[]} nums
 * @return {number}
 */
var waysToSplitArray = function(nums) {
    let preFixArr = [];
    let sum = 0
    for(let num of  nums){
        sum+=num;
        preFixArr.push(sum);
    }
    let res = 0;
    for(let i = 0;i<nums.length-1;i++){
        if(preFixArr[i]>=sum-preFixArr[i]){
            res ++;
        }
    }
    return res;

};

思路二:

根据上面的思路可以优化,只记录最大值,没有必要用数组记录每个元素的前缀和,只要每次遍历的时候left++,就能得到每次遍历左边的值。

js 复制代码
/**
 * @param {number[]} nums
 * @return {number}
 */
var waysToSplitArray = function(nums) {
    let sum = 0
    for(let num of  nums){
        sum+=num;
    }
    let res = 0;
    left = 0;
    for(let i = 0;i<nums.length-1;i++){
        left+=nums[i];
        if(left>=sum-left){
            res++;
        }
    }
    return res;

};
相关推荐
ULTRA??2 分钟前
Rust的移动语义
c++·算法·rust
不穿格子的程序员21 分钟前
从零开始写算法——链表篇:相交链表 + 反转链表
数据结构·算法·链表
仰泳的熊猫22 分钟前
1132 Cut Integer
数据结构·c++·算法·pat考试
aini_lovee22 分钟前
基于边缘图像分割算法详解与MATLAB实现
开发语言·算法·matlab
拼好饭和她皆失28 分钟前
高效算法的秘诀:滑动窗口(尺取法)全解析
数据结构·算法·滑动窗口·尺取法
断剑zou天涯39 分钟前
【算法笔记】二叉树的Morris遍历
数据结构·笔记·算法
元亓亓亓41 分钟前
LeetCode热题100--739. 每日温度--中等
python·算法·leetcode
小白程序员成长日记43 分钟前
2025.12.11 力扣每日一题
数据结构·算法·leetcode
一碗白开水一44 分钟前
【论文阅读】Denoising Diffusion Probabilistic Models (DDPM)详细解析及公式推导
论文阅读·人工智能·深度学习·算法·机器学习
代码游侠1 小时前
学习笔记——进程
linux·运维·笔记·学习·算法