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

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

题目:

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

思路一:

  • 遍历数组,用prefixArr 记录每个元素的前缀和。
  • 再遍历 prefixArr。
    • index 最大只能取到 prefix.length -2。 因为要保证右边至少有一个数。
    • 左边的数(prefixArr) ≥ 右边的数(prefixArrprefixArr.length-1-preArri
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;

};
相关推荐
lueluelue474 小时前
LeetCode:链表
算法·leetcode·链表
橘子汽水1687 小时前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子7 小时前
Adaboost算法原理与计算实例
算法
别怪我很水7 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
Re.不晚10 小时前
挑战做100道力扣算法- DAY1
算法·leetcode·职场和发展
蓝悦无人机10 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*11 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木11 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
alexwang21111 小时前
HDU 4348 详细题解
c++·算法·题解·hdu·主席树·可持久化数据结构·可持久化线段树