当前位置: 首页 > news >正文

3427. 变长子数组求和

给你一个长度为 n 的整数数组 nums 。对于 每个 下标 i0 <= i < n),定义对应的子数组 nums[start ... i]start = max(0, i - nums[i]))。

返回为数组中每个下标定义的子数组中所有元素的总和。

子数组 是数组中的一个连续、非空 的元素序列。

示例 1:

输入:nums = [2,3,1]

输出:11

解释:

下标 i子数组
0nums[0] = [2]2
1nums[0 ... 1] = [2, 3]5
2nums[1 ... 2] = [3, 1]4
总和11

总和为 11 。因此,输出 11 。

示例 2:

输入:nums = [3,1,1,2]

输出:13

解释:

下标 i子数组
0nums[0] = [3]3
1nums[0 ... 1] = [3, 1]4
2nums[1 ... 2] = [1, 1]2
3nums[1 ... 3] = [1, 1, 2]4
总和13

总和为 13 。因此,输出为 13 。

提示:

  • 1 <= n == nums.length <= 100
  • 1 <= nums[i] <= 1000
/**
     * 3427. 变长子数组求和
     */
    public static int subarraySum(int[] nums) {
        int[] s = new int[nums.length + 1];
        // 初始化为0,方便对前缀求和
        s[0] = 0;
        int ans = 0;
        for (int i = 0; i < nums.length; i++) {
            // 根据题目求得子区间nums[start,i]
            int start = Math.max(0, i - nums[i]);
            // 前缀和求和
            s[i + 1] = s[i] + nums[i];
            // 利用前缀和快速计算区间内的和
            ans += s[i + 1] - s[start];
        }
        return ans;
    }

相关文章:

  • 【YOLO V5】目标检测 WSL2 AutoDL VScode SSH
  • 基于编译器特性浅析C++程序性能优化
  • Vue基础
  • 【Linux】自定协议和序列化与反序列化
  • 跨域-告别CORS烦恼
  • 【C++设计模式】第七篇:桥接模式(Bridge)
  • @PostConstruct注解的作用
  • 基于websocket的多用户网页五子棋 --- 测试报告
  • 小微企业友好方案:低成本智能客服系统如何落地
  • C# 基础知识总结(持续更新中...)
  • 数据仓库建模方法论:起源、发展与深度对比解析
  • ICLR 2025|香港浸会大学可信机器学习和推理课题组专场
  • 密码学基础-Hash、MAC、HMAC 的区别与联系
  • 计算机毕业设计SpringBoot+Vue.js个人博客系统(源码+文档+PPT+讲解)
  • react 19版中路由react-router-dom v7版的使用
  • 厦大第三发:《DeepSeek大模型及其企业应用实践》
  • 1.Big-endian/ little endian大端对齐、小端对齐
  • Camera相关配置
  • 带宽管理组网配置
  • Web Snapshot 网页截图 模块代码详解
  • 夜读丨读《汉书》一得
  • 在古老的意大利科莫歌剧院,廖昌永唱响16首中国艺术歌曲
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 超新星|18岁冲击中超金靴,王钰栋的未来无限可能
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光
  • 【社论】人工智能将为教育带来什么