【LeetCode每日一题】——1588.所有奇数长度子数组的和

news2024/11/30 14:24:54

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【题目进阶】
  • 八【解题思路】
  • 九【时间频度】
  • 十【代码实现】
  • 十一【提交结果】

一【题目类别】

  • 前缀和

二【题目难度】

  • 简单

三【题目编号】

  • 1588.所有奇数长度子数组的和

四【题目描述】

  • 给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
  • 子数组 定义为原数组中的一个连续子序列。
  • 请你返回 arr 中 所有奇数长度子数组的和 。

五【题目示例】

  • 示例 1

    • 输入:arr = [1,4,2,5,3]
    • 输出:58
    • 解释:所有奇数长度子数组和它们的和为:
      [1] = 1
      [4] = 4
      [2] = 2
      [5] = 5
      [3] = 3
      [1,4,2] = 7
      [4,2,5] = 11
      [2,5,3] = 10
      [1,4,2,5,3] = 15
      我们将所有值求和得到 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58
  • 示例 2

    • 输入:arr = [1,2]
    • 输出:3
    • 解释:总共只有 2 个长度为奇数的子数组,[1] 和 [2]。它们的和为 3 。
  • 示例 3

    • 输入:arr = [10,11,12]
    • 输出:66

六【题目提示】

  • 1 <= arr.length <= 100
  • 1 <= arr[i] <= 1000

七【题目进阶】

  • 你可以设计一个 O ( n ) O(n) O(n) 时间复杂度的算法解决此问题吗?

八【解题思路】

  • 该题很容易想到的思路就是暴力模拟,这个方式确实很简单,不过复杂度太高
  • 所以使用前缀和方法来解决该问题可以降低时间复杂度
    • 计算前缀和数组,前缀和数组的每一位表示从原数组的开始到每一位的累加和
    • 然后使用简单的数学运算找到所有奇数长度子数组
    • 最后使用前缀和数组对找到的所有奇数长度子数组求和
  • 最后返回结果即可
  • 具体细节可以参考下面的代码

九【时间频度】

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2) n n n为传入的数组的长度
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的数组的长度

十【代码实现】

  1. Java语言版
class Solution {
    public int sumOddLengthSubarrays(int[] arr) {
        // 计算前缀和数组,prefixSum[i]表示数组arr从索引0到i的累加和
        int[] prefixSum = new int[arr.length];
        prefixSum[0] = 0;
        for (int i = 1; i < arr.length; i++)
        {
            prefixSum[i] = prefixSum[i - 1] + arr[i];
        }
        // 保存结果
        int sum = 0;
        // 计算所有奇数长度子数组的和
        for (int start = 0; start < arr.length; start++)
        {
            // 计算奇数长度子数组区间的和
            for (int length = 1; start + length <= arr.length; length += 2)
            {
                // 计算奇数长度子数组的末尾索引
                int end = start + length - 1;
                // 根据前缀和数组计算奇数长度子数组的和
                sum += prefixSum[end] - prefixSum[start] + arr[start];
            }
        }
        // 返回结果
        return sum;
    }
}
  1. Python语言版
class Solution:
    def sumOddLengthSubarrays(self, arr: List[int]) -> int:
        # 计算前缀和数组,prefixSum[i]表示数组arr从索引0到i的累加和
        prefix_sum = [0] * len(arr)
        prefix_sum[0] = 0
        for i in range(1, len(arr)):
            prefix_sum[i] = prefix_sum[i - 1] + arr[i]
        # 保存结果
        res = 0
        # 计算所有奇数长度子数组的和
        for start in range(0, len(arr)):
            # 计算奇数长度子数组区间的和
            for length in range(1, len(arr) - start + 1, 2):
                # 计算奇数长度子数组的末尾索引
                end = start + length - 1
                # 根据前缀和数组计算奇数长度子数组的和
                res += prefix_sum[end] - prefix_sum[start] + arr[start]
        # 返回结果
        return res
  1. C语言版
int sumOddLengthSubarrays(int* arr, int arrSize) 
{
    // 计算前缀和数组,prefixSum[i]表示数组arr从索引0到i的累加和
    int* prefixSum = (int*)malloc(sizeof(int) * arrSize);
    prefixSum[0] = arr[0];
    for (int i = 1; i < arrSize; i++)
    {
        prefixSum[i] = prefixSum[i - 1] + arr[i];
    }
    // 保存结果
    int sum = 0;
    // 计算所有奇数长度子数组的和
    for (int start = 0; start < arrSize; start++)
    {
        // 计算奇数长度子数组区间的和
        for (int length = 1; start + length <= arrSize; length += 2)
        {
            // 计算奇数长度子数组的末尾索引
            int end = start + length - 1;
            // 根据前缀和数组计算奇数长度子数组的和
            sum += prefixSum[end] - prefixSum[start] + arr[start];
        }
    }
    // 返回结果
    return sum;
}

十一【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI系统】AI 学习方法与算法现状

在人工智能&#xff08;AI&#xff09;的漫长历史中&#xff0c;我们见证了从早期的规则驱动系统到现代的机器学习模型的转变。AI的学习方法是其进步的核心&#xff0c;而算法现状则反映了当前技术的高度和未来的发展方向。 Ⅰ.AI 学习方法 AI的工作原理基于深度神经网络&…

源码编译llama.cpp for windows on arm

源码编译llama.cpp for windows on arm 这里有编译好的&#xff0c;直接下载使用 https://github.com/turingevo/llama.cpp-build/releases 1 先编译openblas for windows on arm 查看我的文章 《源码编译 openblas for windows on arm》 2 启用OpenBlas加速 上一步openb…

A0002.主机访问虚拟机中windows系统时,ping不通问题解决

问题再现 解决方法 查看主机的IP地址及DNS 在虚拟机中设置IP地址和DNS

leetcode计数排序

计数排序&#xff08;counting sort&#xff09;通过统计元素数量来实现排序&#xff0c;通常应用于整数数组。 给定一个长度为 的数组 nums &#xff0c;其中的元素都是“非负整数” def counting_sort(nums: list[int]):"""计数排序"""# 完整实…

设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小

Notepad 默认的制表符宽度是 4 个空格的大小&#xff0c;一个规模比较大的代码段或者 xml 等文件&#xff0c;小屏幕打开时看到的情景真的和让人着急&#xff0c;拖来拖去&#xff01;有两种方案可以解决这种情况。 修改缩进为空格 这种我们不太推荐&#xff0c;但是有些公司…

【Vue】Vue3.0(十一)Vue 3.0 中 computed 计算属性概念、使用及示例

上篇文章&#xff1a;【Vue】Vue3.0&#xff08;十&#xff09;toRefs()和toRef()的区别及使用示例 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年10月15日10点23分 文章目录 Vue 3.0中…

IDC《中国网络安全软件技术发展路线图,2024》报告身份管理 移动安全推荐厂商

10月9日&#xff0c;全球知名研究与分析机构IDC发布了《IDC TechScape&#xff1a;中国网络安全软件技术发展路线图&#xff0c;2024》报告&#xff0c;深入剖析了中国网络安全软件市场的现状与未来趋势。芯盾时代作为领先的零信任业务安全产品方案提供商&#xff0c;凭借在身份…

FFmpeg 4.3 音视频基础到工程应用-多路H265监控录放C++开发一 : 环境搭建1 vs2019 安装,

一 VS2019安装 https://pan.baidu.com/s/1CtMOM5Zhu-HcHcj611edOg#list/path%2F 密码 p668 二 菜单运行vs2019编译控制台 如果我们要build 32 位的程序&#xff0c;则使用 如果我们要build 64 位的ffmpeg&#xff0c;则使用 x64 Navite Tools Command Prompt for VS 2019 我们…

红日靶机(四)笔记

VulnStack-红日靶机四 概述 这个靶场环境包含了三台机器&#xff0c;一台web&#xff0c;两台window域机器。web服务是使用docker容器搭建的&#xff0c;所以就涉及到docker逃逸。而在获得立足点的过程中&#xff0c;我们要对三个docker容器分别测试&#xff0c;不能漏掉可以…

2012年国赛高教杯数学建模C题脑卒中发病环境因素分析及干预解题全过程文档及程序

2012年国赛高教杯数学建模 C题 脑卒中发病环境因素分析及干预 脑卒中&#xff08;俗称脑中风&#xff09;是目前威胁人类生命的严重疾病之一&#xff0c;它的发生是一个漫长的过程&#xff0c;一旦得病就很难逆转。这种疾病的诱发已经被证实与环境因素&#xff0c;包括气温和湿…

Ubuntu内存扩容

目录 vmware设置Ubuntu设置查看 读研后发现&#xff0c;Ubuntu的使用量直线上升&#xff0c;之前给配置了20g内存&#xff0c;安装了个ros后&#xff0c;没啥内存了。本文实现给Ubuntu扩容。 vmware设置 这里 我使用别人的截图来演示。 我在这里改成了60 Ubuntu设置 sudo a…

Linux基础-进程的超详细讲解(2)_进程的创建

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux基础-进程的超详细讲解(2)_进程的创建与状态 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#…

Python从入门到高手6.4节-字符串格式化详解

目录 6.4.1 理解格式化 6.4.2 使用f-string进行格式化 6.4.3 使用格式化符号进行格式化 6.4.4 使用format方法进行格式化 6.4.5 上山打老虎 6.4.1 理解格式化 同学们比较熟悉的是磁盘格式化&#xff0c;将磁盘格式化以后&#xff0c;磁盘中的文件全部被清除。那么&#x…

数据湖新突破:Hudi让实时数据分析更高效!

开源数据湖对比 Hudi的使用收益 Hudi使用成效 Hudi内部机制 增量摄入与更新 Hudi使用一种混合日志存储模式(称为Copy-on-Write),可以同时处理基础数据文件(Parquet)和增量日志(HoodieLogFile)。以 MergeOnReadTable 的 upsert 操作为例,当有新数据到来时,Hudi会先将数据以行…

ubuntu 虚拟机将linux文件夹映射为windows网络位置

在使用虚拟机时可以选择将windows的文件夹设置为共享文件夹方便在虚拟机中访问windows中的文件,同理,也可以将linux的文件夹共享为一个网络文件夹,通过windows的添加一个网络位置功能,将linux的文件夹映射到windows本地,方便windows访问使用linux的文件夹 参照如下:https://blo…

CMA软件测评实验室如何申请|申请流程、筹备环节、材料清单、资源准备

CMA软件测评实验室资质的申请需要做好哪些准备工作&#xff1f;需要准备哪些材料&#xff1f;本文我们一起来梳理一下CMA软件测评实验室申请流程、准备环节、材料准备以及资源准备。 一、CMA软件测评实验室资质申请流程 1、申请资质认定的检验检测机构&#xff08;以下简称申…

使用OpenRewrite将Java自动升级到Java 21

使用 OpenRewrite 可以实现将Java 项目自动升级到Java 21语法。 基于Maven项目的实现步骤 步骤非常简单&#xff0c; 具体如下&#xff1a; 在pom.xml 中添加如下插件&#xff1a; <project><build><plugins><plugin><groupId>org.openrewri…

第90届CMEF进行中,飞凌嵌入式引领智慧医疗新潮流

2024年10月12日&#xff0c;第90届中国国际医疗器械博览会 (CMEF)在深圳国际会展中心(宝安)开幕&#xff0c;来自全球各地的4000多家展商齐聚一堂&#xff0c;为全球健康产业带来探析前沿、洞见未来的医疗盛宴&#xff0c;飞凌嵌入式在13号馆D01展位隆重亮相。 飞凌嵌入式作为…

经典文献阅读之--GMMCalib(使用基于GMM的联合配准进行激光雷达传感器的外部标定)

0. 简介 现有的激光雷达标定框架主要使用迭代最近点(ICP)及其变体等非概率配准方法。由于它们的成对配准过程以及对初始化和参数化的敏感性&#xff0c;这些方法的结果存在偏差。这通常会导致校准过程中的不校准。概率配准方法通过专门模拟观测值的概率性质来弥补这些缺点。《…

上市公司社会责任报告信息数据(纳税金额、社会捐赠等) 2007-2023年

一、数据指标&#xff1a; 股票代码 统计截止日期 公告日期 所属省份 行业代码 行业名称 纳税总额 每股社会贡献值 社会捐赠额 是否经第三方机构审验 审验机构 是否参照GRI《可持续发展报告指南…