【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;

};
相关推荐
吃好睡好便好6 小时前
用while循环语句求和
开发语言·学习·算法·matlab·信息可视化
王璐WL6 小时前
【C语言入门级教学】函数的概念2
c语言·数据结构·算法
不知名的忻7 小时前
B 树与 B+ 树:面试完全指南
b树·算法·面试·b+树
运筹vivo@8 小时前
2657. 找到两个数组的前缀公共数组 | 难度:中等
算法·leetcode·职场和发展·哈希表
索木木8 小时前
NCCL SHARP 和 TREE算法
java·服务器·算法
心中有国也有家9 小时前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
小O的算法实验室10 小时前
2026年MCS,Q-learning增强MOPSO与改进DWA融合算法+复杂三维地形下特定移动机器人动态路径规划
算法
Peter·Pan爱编程10 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
故事和你9112 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
重生之我是Java开发战士12 小时前
【动态规划】背包问题:完全背包,二位费用的背包问题,似包非包
算法·动态规划