Python求子数组和的所有元素(附Demo)

news2024/11/24 20:04:17

目录

  • 前言
  • 1. 暴力求解
  • 2. 前缀和哈希表
  • 3. 滑动窗口

前言

工作需要,对应需要优化查找子数组和等于特定值的算法

对应的算法推荐:子数组相关题目

以下算法主要针对Python

1. 暴力求解

双重循环时间复杂度为 O(n2)

def subarrays_with_sum_equal_k(nums, k):
    result = []
    n = len(nums)

    for start in range(n):
        current_sum = 0
        for end in range(start, n):
            current_sum += nums[end]
            if current_sum == k:
                result.append(nums[start:end + 1])

    return result


# 示例用法
nums = [10, 2, 2, 5, 4]
k = 4
result = subarrays_with_sum_equal_k(nums, k)

print("Subarrays with sum equal to {}:".format(k))
for subarray in result:
    print(subarray)

截图如下所示:

在这里插入图片描述

如果是乘积,注意差异之处:

def subarrays_with_product_equal_k(nums, k):
    result = []
    n = len(nums)
    
    for start in range(n):
        prod = 1
        for end in range(start, n):
            prod *= nums[end]
            if prod == k:
                result.append(nums[start:end+1])
            elif prod > k:
                break
    
    return result

# 示例用法
nums = [10, 2, 2, 5, 4]
k = 20
result = subarrays_with_product_equal_k(nums, k)

print("Subarrays with product equal to {}:".format(k))
for subarray in result:
    print(subarray)

2. 前缀和哈希表

时间复杂度为O(n)

def subarrays_with_sum_equal_k(nums, k):
    result = []
    prefix_sum = 0 # 用于计算到当前元素的前缀和
    prefix_sum_map = {0: [-1]}  # 使用哈希表存储前缀和及其索引列表

    for i, num in enumerate(nums):
        prefix_sum += num
        if (prefix_sum - k) in prefix_sum_map:
            for start in prefix_sum_map[prefix_sum - k]:
                result.append(nums[start + 1:i + 1])
        
        if prefix_sum in prefix_sum_map:
            prefix_sum_map[prefix_sum].append(i)
        else:
            prefix_sum_map[prefix_sum] = [i]

    return result

# 示例用法
nums = [10, 2, -2, -20, 10]
k = -10
result = subarrays_with_sum_equal_k(nums, k)

print("Subarrays with sum equal to {}:".format(k))
for subarray in result:
    print(subarray)

截图如下:

在这里插入图片描述

3. 滑动窗口

不适用于负数还有浮点小数的情况

def subarrays_with_sum_equal_k(nums, k):
    result = []
    current_sum = 0 # 存储当前窗口内元素的和
    start = 0 # 滑动窗口的起始位置
    
    for end in range(len(nums)):
        current_sum += nums[end]
        
        while current_sum > k and start <= end:
            current_sum -= nums[start]
            start += 1
        
        if current_sum == k:
            result.append(nums[start:end+1])
    
    return result

# 示例用法
nums = [10, 2, 2, 5, 4]
k = 10
result = subarrays_with_sum_equal_k(nums, k)

print("Subarrays with sum equal to {}:".format(k))
for subarray in result:
    print(subarray)

截图如下:

在这里插入图片描述

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

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

相关文章

项目干系人管理

目录 1.概述 2.四个子过程 2.1. 识别干系人&#xff08;Identify Stakeholders&#xff09; 2.2. 规划干系人参与&#xff08;Plan Stakeholder Engagement&#xff09; 2.3. 管理干系人参与&#xff08;Manage Stakeholder Engagement&#xff09; 2.4. 监督干系人参与&…

探究肥胖致血糖异常的原因与运动的意义

肥胖对身体血糖存在影响&#xff0c;原因主要在于以下两方面。 首先&#xff0c;肥胖者体内的脂肪组织大量积聚&#xff0c;会释放诸多有害物&#xff0c;对胰岛素的正常功能形成干扰&#xff0c;致使胰岛素抵抗加剧&#xff0c;从而造成血糖调节失常。 其次&#xff0c;肥胖往…

路由器虚拟服务器有什么作用

现如今在IPv4时代&#xff0c;由于公网IP地址的匮乏&#xff0c;约有70%的电脑都处于内网中&#xff0c;上网需要通过路由器。如果反过来想要访问身处内网的电脑&#xff0c;我们就需要在路由器里开放相应的端口才能实现。而这开放端口的功能&#xff0c;在路由器里就叫做虚拟服…

15.docker-compose(单机版的容器编排工具)

docker-compose(单机版的容器编排工具) 类似ansible剧本 安装docker-compose编排工具 yum install -y docker-compose #&#xff08;需要epel源&#xff09;##docker-compose配置文件详细指令详解&#xff0c;参考如下链接 http://www.jianshu.com/p/2217cfed29d7 上传两个d…

17.Meta AI 大模型家族 LLaMA

Meta LLaMA 1 大模型技术解读 LLaMA 1&#xff1a;小模型大数据 LLaMA 1 在万亿 Token 公开数据集上预训练 LLaMA 1 模型网络架构改进 大模型网络架构差异性配置总览 典型大模型网络架构对比 LLaMA 1 预训练超参数配置 典型大模型训练超参数对比 LLaMA 1 预训练效率提升与成本…

Linux shell 重定向输入和输出

Linux shell 重定向输入和输出 1. Standard I/O streams2. Redirecting to and from the standard file handles (标准文件句柄的重定向)2.1. command > file2.2. command >> file2.3. command 2> file2.4. command 2>> file2.5. command < file2.6. comm…

JavaFX GridPane布局

网格布局 GridPane通常用于布局&#xff1a;表单布局 GridPane可以在行&#xff0c;列或单元格级别指定约束。 例如&#xff0c;我们可以设置包含输入文本字段的第二列&#xff0c;以在窗口调整大小时调整大小。 使用Java FX创建表格的时候&#xff0c;这个布局非常方便。 包…

39、基于深度学习的(拼音)字符识别(matlab)

1、原理及流程 深度学习中常用的字符识别方法包括卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;。 数据准备&#xff1a;首先需要准备包含字符的数据集&#xff0c;通常是手写字符、印刷字符或者印刷字体数据集。 数据预处理&#xff1…

AI大模型-本科生24暑期实习NLP(Infra LLM)算法工程师面经

Brief Intro 今年暑假&#xff0c;在科研和工业界之间&#xff0c;我选择在国内工业界找一份实习&#xff0c;参与到百模大战的浪潮中&#xff0c;主要的意向是知名的LLM领域的独角兽&#xff0c;期望能避免做Dirty Work&#xff0c;在实习过程中也能被重视&#xff0c;做一些…

AI数据分析:集中度分析和离散度分析

在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 读取Excel表格&#xff1a;"F:\AI自媒体内容\AI行业数据分析\toolify月榜\toolify2023年-2024年月排行榜汇总数据.xlsx&qu…

浙江广厦大学第七届程序设计比赛(重现赛)(个人题解)(未完成)

前言&#xff1a; 今天晚上实验室的一场比赛&#xff0c;题目难度感觉还行&#xff0c;有几道题大家都没做出来&#xff0c;老规矩&#xff0c;这些没写出来的题都放在这&#xff0c;等我有能力补的时候再来写。 正文&#xff1a; 原比赛链接&#xff1a;(1条未读私信) 浙江广…

NASA数据:南极海洋生物资源

Antarctic Marine Living Resources (AMLR) program 南极海洋生物资源许可证 南极海洋生物资源保护委员会公约区受到管制。任何打算从该区域捕获海洋生物的人都必须获得许可证。 简介 美国是南极海洋生物资源保护委员会&#xff08;Commission for the Conservation of Anta…

热管式换热器

热管式换热器是一种高效、紧凑的换热设备&#xff0c;其核心部件是热管。热管技术基于热管内部工作介质&#xff08;通常是液体&#xff09;的相变原理来传递热量&#xff0c;能够实现快速、大温差的热量传输&#xff0c;特别适用于需要高效换热或者在空间受限条件下进行热能交…

【APP_汽修宝】数据采集案例APP_数据解密分析

如果不会写代码&#xff0c;那就出书、写博客、做视频、录播客。 &#x1f4da; S35赛季末王者昭君罗 关键代码定位 使用方法【逆向-快速定位关键代码】通过hook常用函数HashMap方法 动态分析 下面是我们通过访问目标页面时 Frida hook 捕获HashMap的调…

Linux之BCC 性能工具的移植和使用

一、bcc 工具 bcc 的全称&#xff1a;BPF Compiler Collection BCC&#xff08;BPF Compiler Collection&#xff09;是一个用于创建高效的内核跟踪和操作程序的工具包&#xff0c;包含了几个有用的工具和示例。它利用了扩展的BPF&#xff08;Berkeley Packet Filters&#x…

【C/C++】【学生成绩管理系统】深度剖析

可接各类C/C管理系统课设 目录 实现功能 部分1&#xff1a;系统设置和主菜单 1. 引入头文件 2. 定义结构体 3. 函数声明 4. 主函数 部分2&#xff1a;添加学生信息 部分3&#xff1a;删除学生信息 部分4&#xff1a;修改学生信息 部分5&#xff1a;查询学生信息 部分…

大众点评_token,mtgsig

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许可禁止转载&#xff0…

以太网基础知识(三)—FEC概念以及编码原理介绍

1&#xff1a;前言 KR4(528,514) FEC表示的意思&#xff1a; KR4 RS(528,514) FEC 是一种以太网中使用的FEC&#xff08;Forward Error Correction&#xff09;编码方案。在这个方案中&#xff0c;采用的是Reed-Solomon (RS) 编码算法&#xff0c;它被设计用于提高数据传输的…

9M高速USB转接芯片CH347转双串口转I2C转SPI转JTAG转SWD

1、概述 CH347 TSSOP20封装和丝印 CH347 是一款高速 USB 总线转接芯片&#xff0c;通过 USB 总线提供异步串口、I2C 同步串行接口、SPI 同步串行接口和 JTAG 接口等。 在异步串口方式下&#xff0c;CH347 提供了 2 个高速串口&#xff0c;支持 RS485 串口收发使能控制、硬件流控…

论文阅读:基于谱分析的全新早停策略

来自JMLR的一篇论文&#xff0c;https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型&#xff0c;并在此基础上提出了一种用于早停的频谱标准。 1&#xff0c;分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…