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

};
相关推荐
代码游侠17 分钟前
日历的各种C语言实现方法
c语言·开发语言·学习·算法
春日见4 小时前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊4 小时前
”回调“高级
算法·青少年编程
云里雾里!4 小时前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
一只侯子7 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue7 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈8 小时前
Python数据结构
数据结构·算法·排序算法
J***79399 小时前
后端在分布式系统中的数据分片
算法·哈希算法
Dream it possible!10 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树中第 K 小的元素(86_230_C++_中等)
c++·leetcode·面试
sin_hielo10 小时前
leetcode 2872
数据结构·算法·leetcode