LeetCode题目笔记——1588. 所有奇数长度子数组的和

news2024/11/15 20:09:35

文章目录

    • 题目描述
    • 题目难度——简单
    • 方法一:暴力
      • 代码/C++
      • 代码/Python
    • 方法二:前缀和
      • 代码/C++
      • 代码/Python
    • 总结

题目描述

给你一个正整数数组 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

进阶:

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

提示:

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

题目链接

题目难度——简单

方法一:暴力

  根据提示,数据量很小,所以最简单的方法就是暴力,直接模拟这个过程。用一个三层循环。时间复杂度是O(N3)

代码/C++

class Solution {
public:
    int sumOddLengthSubarrays(vector<int>& arr) {
        // 暴力
        int step, i, j, res = 0, n = arr.size();
        for(i = 0; i < n; i++){
            for(step = 1; i + step <= n; step += 2){
                int right = i + step - 1;
                for(j = i; j <= right; j++){
                    res += arr[j];
                }
            }
        }
        return res;
    }
};

在这里插入图片描述

代码/Python

class Solution:
    def sumOddLengthSubarrays(self, arr: List[int]) -> int:
        res = 0
        n = len(arr)
        for i in range(len(arr)):
            step = 1
            while step + i <= n:
                right = step + i - 1
                for j in range(i, right + 1):
                    res += arr[j]
                step += 2
        
        return res

方法二:前缀和

  在暴力方法里,后面的奇数长度数组求和会重复加前面奇数长度加过的数,就有很多加法的浪费。所以我们可以先用一个数组,将原数组的前缀和存储起来,对每个奇数长度的子数组,用右边界的前缀和减去左边界的前缀和就是当前子数组的和。这样能将复杂度降到O(N2)。

代码/C++

class Solution {
public:
    int sumOddLengthSubarrays(vector<int>& arr) {
        // 前缀和
        int n = arr.size(), i, left, right, step, res = 0;
        vector<int> prefixSums(n + 1);
        for(i = 0; i < n; i++){
            prefixSums[i + 1] = prefixSums[i] + arr[i];
        }
        for(left = 0; left < n; left++){
            for(step = 1; step + left <= n; step += 2){
                right = left +step - 1;
                res += prefixSums[right + 1] - prefixSums[left];
            }
        }
        return res;
    }
};

在这里插入图片描述

代码/Python

class Solution:
    def sumOddLengthSubarrays(self, arr: List[int]) -> int:
        # 前缀和方法
        res = 0
        n = len(arr)
        prefixSum = [0] * (n + 1)
        for i in range(n):
            prefixSum[i + 1] = prefixSum[i] + arr[i]
        
        for i in range(n):
            step = 1
            while step + i <= n:
                right = i + step - 1
                res += prefixSum[right + 1] - prefixSum[i]
                step += 2
        
        return res

总结

  第一种暴力的空间复杂度是O(1),因为只用到了几个int变量,第二种前缀和用到了额外的数组,所以空间复杂度是O(N)。关于进阶的思路,需要找到其中的数学规律,有一点复杂,建议感兴趣的伙伴自行查看官方题解。

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

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

相关文章

MySql性能优化(六)索引监控

文章目录索引监控Handler_read_firstHandler_read_keyHandler_read_lastHandler_read_nextHandler_read_prevHandler_read_rndHandler_read_rnd_next索引监控 SHOW STATUS LIKE Handler_read%解释一下各个参数的含义 Handler_read_first 通过index获取数据的次数 Handler_r…

在cmd中遍历局域网内的IP命令解析

简单的方法 1&#xff0c;直接通过浏览器访问路由器&#xff0c;通过路由器的页面查看。2&#xff0c;网络中很多扫描网络的软件&#xff0c;3&#xff0c;自己使用cmd命令查看 有时候自己也觉得&#xff0c;有简单的方式还用这麻烦的干嘛。但遇到不知道路由的登录密码呢&…

Djiango零基础-快速了解基本框架笔记-附案例

初识Djiango 1. 安装djiango pip install django4.1 -i https://mirrors.aliyun.com/pypi/simple/C:\python38- python.exe- Scripts- pip.exe- djiango-admin.exe 【工具&#xff0c;创建djiango项目】- Lib- 内置模块- site-packages- openpyxl- python-docx- flask- djia…

IPV6实验(2.3)

目标&#xff1a; 一、首先将r2、r3、r4这个公网先弄通 [r2]int gi 0/0/0 [r2-GigabitEthernet0/0/0]ip add 23.1.1.1 24 [r3]int gi 0/0/0 [r3-GigabitEthernet0/0/0]ip add 23.1.1.2 24 [r3-GigabitEthernet0/0/0]int gi 0/0/1 [r3-GigabitEthernet0/0/1]ip add 34.1.1.1 2…

YOLO的学习

如何评价Alexey Bochkovskiy团队提出的YoloV7&#xff1f; - 知乎 1, Selective Search&#xff0c;RCNN和FasterRCNN 机器视觉(CV) 超简指南 选择性搜索 Selective Search_哔哩哔哩_bilibili 【精读RCNN】03选择性搜索&#xff0c;selective search_哔哩哔哩_bilibili …

win10系统安装

系统安装 文章目录系统安装1.工具下载2.制作启动盘3. win 10镜像下载4.进入PE系统1.工具下载 需要准备一个至少16 GB的U盘&#xff0c;工具下载链接 U盘&#xff1a;https://share.weiyun.com/aHhPh16e 迅雷&#xff1a;https://dl.xunlei.com/ win 10 镜像链接&#xff1a…

大咖说·计算讲谈社|当我们在谈目标时,究竟在谈什么?

本讲内容&#xff0c;节选自阿里巴巴研究员吴翰清&#xff08;道哥&#xff09;面向团队的内部讲话&#xff0c;经删减整理后&#xff0c;作为【计算讲谈社】第十六讲公开分享。 讲师介绍 吴翰清&#xff08;道哥&#xff09;&#xff1a;阿里巴巴研究员&#xff0c;阿里巴巴、…

33复杂美,上链不复杂

“链上复杂美&#xff0c;上链不复杂。” 33复杂美座落在美丽的西子湖畔&#xff1a;杭州&#xff0c;并在上海、南京、宁波、海南皆有设立分部。公司员工超过100人&#xff0c;70%为技术人员&#xff0c;吸引了来自甲骨文、阿里等优秀人才加盟。复杂美为浙江省区块链技术应用协…

windows 编译telegram桌面客户端

目的 主要是为了研究一下人家的软件架构。 步骤 前置条件 梯子至少10G硬盘空间 安装第三方应用 请更新至最新版。 GITCmakePython3visual studio 2022Qt Visual Studio Tools: Open Extensions -> Manage Extensions Go to Online tab Search for Qt Install Qt Visu…

系统学习Python——2D绘图库Matplotlib:绘图函数matplotlib.pyplot.plot

分类目录&#xff1a;《系统学习Python》总目录 matplotlib.pyplot是Matplotlib的基于状态的接口。它提供了一种隐式的、类似MATLAB的绘图方式。它还会在您的屏幕上打开图形&#xff0c;并充当图形GUI管理器。 语法 matplotlib.pyplot.plot(*args, scalexTrue, scaleyTrue , …

威联通NAS共享文件夹挂载到linux服务器下

威联通虚机中centos挂载共享文件夹设置方法 1、登录到QTS。 2、控制台–>Win/Mac/NFS选项&#xff0c;在Linux NFS中开启NFS v3或NFSv4服务。 3、设置文件夹权限&#xff1a; 控制台–>共享文件夹中&#xff0c;找到需要共享的文件夹&#xff0c;编辑文件夹权限。 选…

Golang数据竟态

本文以一个简单事例的多种解决方案作为引子&#xff0c;用结构体Demo来总结各种并发读写的情况 一个数据竟态的case package mainimport ("fmt""testing""time" )func Test(t *testing.T) {fmt.Print("getNum(): ")for i : 0; i <…

「Python|场景案例」如何将多个视频合并成多个子画面并排的单个视频?

本文主要介绍如何将多个视频画面合并到一个视频中&#xff0c;使得合成后的视频画面是原视频的并排画面。 文章目录场景描述准备工作处理步骤源代码处理效果展示场景描述 在某些音视频剪辑的场景下我们希望一个视频画面显示多个子画面&#xff0c;比如&#xff1a; 乐器演奏视…

【MySQL】数据库概述

文章目录1、数据库1.1 数据库作用1.2 数据库的相关概念1.3 数据库与数据库管理系统的关系2、MySQL3、RDBMS与非RDBMS3.1 关系型数据库(RDBMS)3.2 非关系型数据库(非RDBMS)3.2.1 键值型数据库3.2.2 文档型数据库3.2.3 搜索引擎数据库3.2.4 列式数据库3.2.5 图形数据库4、关系型数…

基于微信小程序的短视频管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端框架&#xff1a;VUE 数据库&#xff1a;MySQL5.7 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录 一、项目简介 二…

推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 在我们日常项目开发中&#xff0c;经常需要解析操作文档&#xff0c;比如Office文档、Email文件、PDF、Xml、图片、Mp3等音频文件&#xff0c;操作Office、PDF文件我们需要用到IFilter&#xff0c;操作文本、图片…

【C++】引用与指针

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;引用引用的概念在C中&#xff0c;引用的本质其实就是给一个已经存在的变量”起别名“。也就是说&#xff0c;引用与它所引用的对象共用一块空间。&#xff08;同一块空间的多个名字&#xff09;就…

【搭建 mybatis 开发环境】

搭建 mybatis 开发环境 环境准备 创建数据库 创建maven 工程 pom文件&#xff1a;添加打包方式为jar 以及 mybatis 和 mysql 依赖 环境搭建 编写实体类 User.java&#xff1a;属性&#xff0c;生成get 和 set 方法 以及 toString方法 创建 IUserDao 接口&#xff0c;操作…

java进阶—一篇文章搞懂set 集合 及其底层实现

上节我们知道了List 下的两大 子类 ArrayList 跟 linkedList ArrayList 数组结构 查询快&#xff0c;增删慢 LinkedList 链表结构 查询慢&#xff0c;增删快 来看看我们今天的主角: Set Set 是 不可重复的&#xff0c;其底下也有两大子接口&#xff1a; HashSet&#xff1…

我用Python轻松玩转ChatGPT的聊天机器人和AI画画

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚…