LeetCode 506.和为K的子数组

news2024/11/23 21:42:48

目录

题目描述

方法一 三重循环暴力

思路:

代码:

方法二 暴力+一点点前缀和

思路:

代码:

方法三  前缀和+哈希表

思路:

代码:


题目描述

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 

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

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

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

提示:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107

方法一 三重循环暴力

思路:

以0为子数组的开始下标,子数组的结束下标是0~len-1.里面再来一个循环来计算子数组的总和。O\left ( n^{3} \right )

代码:

class Solution {
    public int subarraySum(int[] nums, int k) {
        int len=nums.length;
        int count=0;
        for(int left=0;left<len;left++){
            for(int right = left;right<len;right++){
                int sum=0;
                for(int i=left;i<=right;i++){
                    sum+=nums[i];
                }
                if(sum==k) count++;
            }
        }
        return count;
    }
}

方法二 暴力+一点点前缀和

思路:

我们其实只需要固定数组的开始下标,结束下标的指针一直移动,sum一直累加,累加到sum==k就代表找到一个,注意还可以继续往后走,因为数组可以有负数

代码:

class Solution {
    public int subarraySum(int[] nums, int k) {
        int len=nums.length;
        int count=0;
        for(int left=0;left<len;left++){
            int sum=0;
            //这里求sum就是用了上一次sum的结果(嗯...怎么不算前缀和呢)
            for(int right = left;right<len;right++){
                    sum+=nums[right];
                    if(sum==k) count++;
            }
        }
        return count;
    }
}

 O\left ( n^{2} \right )

方法三  前缀和+哈希表

思路:

这个思路好难,根本想不到。

前缀和是不带自己的的前面所有元素的和(震惊我了,我一直以为是带上当前元素)。

我们把所有前缀和算出来,按照次数put到哈希表中,之后我们看以i为结尾的子数组是否有和为k的,i的前缀和是preSum[i],如果有前缀和为k-preSum[i]的就是找到了。

代码更简洁但是更不好懂,不需要数组preSum[]去存前缀和,只需要从前往后走一遍就可以了。

代码:

class Solution {
    public int subarraySum(int[] nums, int k) {
        int len=nums.length;
        int count=0;
        //(前缀和,次数)
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        map.put(0,1);
        int preSum=0;
        for(int i=0;i<len;i++){
           preSum+=nums[i];
            if(map.containsKey(preSum-k)){
                count+=map.get(preSum-k);
            }
            map.put(preSum,map.getOrDefault(preSum,0)+1);
        }
        return count;
    }
}

参考链接:560. 和为 K 的子数组 - 力扣(LeetCode)

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

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

相关文章

超净实验室用耐强酸碱耐高温PFA酸缸进口透明聚四氟塑料方槽

PFA清洗槽是四氟清洗桶后的升级款&#xff0c;主要用于半导体光伏光电等行业&#xff0c;一体成型&#xff0c;无需担心漏液&#xff0c;表面光滑无毛刺。 别名PFA浸泡桶、PFA酸缸、PFA方槽等&#xff0c;可定制尺寸&#xff0c;可配套盖子&#xff0c;盖子有PFA/PTFE两种材质…

idea连接Docker数据库

我们在docker下创建了数据库&#xff0c;想要更方便的查看和操作该数据库&#xff0c;idea和DataGrip或者其他人家都可以。在数据库连接时需要填写数据库名字&#xff0c;主机&#xff0c;端口&#xff0c;数据库用户名和密码。 输入之后先不要点击OK和按Enter键&#xff0c;我…

HubSpot流量开发常见问题及解决方案

在HubSpot流量开发过程中&#xff0c;企业和营销团队可能会遇到一系列问题。本文旨在梳理这些常见问题&#xff0c;并提供相应的解决方案&#xff0c;帮助大家顺利推进HubSpot流量开发项目。 一、数据集成问题 问题&#xff1a;如何将外部数据源与HubSpot集成&#xff0c;实现…

SIDE:多维赋能,助力高效开发且获得收益

在当下数字化快速发展的时代&#xff0c;SIDE这款应用开发平台确实展现出了其前瞻性和实用性。昨天我们介绍了SIDE作为一款先进的应用开发平台&#xff0c;开启研发新的颠覆式的开发新纪元。除了开发体验外&#xff0c;SIDE还以其多维度的赋能手段&#xff0c;为开发者提供了高…

大语言模型微调技术

Adapter 参考资料&#xff1a;《Parameter-efficient transfer learning for nlp》 adpater首先将原始的d维特征映射到较小的维度m&#xff0c;应用非线性函数&#xff0c;然后再重新映射回d维。总的参数量&#xff08;包含biases&#xff09;为 2mddm&#xff0c; 当m远小于d…

业务数字原生驶入2.0时代:谁在成为新抓手?

对奥哲云枢All in One低代码平台的一个更为全面的认知恰是&#xff0c;其在成为AI时代企业内部的一个超级操作系统。 作者|皮爷 出品|产业家 过去的几年时间里&#xff0c;赵仕杰一直有个困扰他的问题。 作为首创热力的CIO&#xff0c;也是过去几年这家热力企业数字化转…

JavaSE进阶篇-面向对象程序设计

一、面向对象和面向过程的关系 1&#xff09;面向过程&#xff1a;强调的是功能行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做&#xff1b; 2&#xff09;面向对象&#xff1a;强调了具备功能的对象&#xff0c;以类/对象为最小单位&#xff0c;考虑谁来做。 总结…

武汉星起航:挂牌资本市场,助力创业者与投资者共绘辉煌蓝图

2023年10月30日&#xff0c;对于武汉星起航电子商务有限公司而言&#xff0c;是一个值得铭记的日子。这一天&#xff0c;公司成功在上海股权托管交易中心挂牌展示&#xff0c;正式登录资本市场&#xff0c;开启了新的发展阶段。这一里程碑式的成就&#xff0c;不仅彰显了武汉星…

Mybatis中SqlSession接口中的selectList方法

1、SqlSession SqlSession是Mybatis持久层框架提供的接口&#xff0c;该接口中包含了大量的CRUD操作方法&#xff08;既增删改查方法&#xff09;。 2、selectList方法 selectList方法是用于查询的方法&#xff0c;该方法具有多态性&#xff0c;如图所示&#xff08;打开myb…

掼蛋-用好逢人配

逢人配是掼蛋的特殊规则之一&#xff0c;是主牌中当前打的两张红桃牌&#xff0c;这两张可以充当百搭牌&#xff0c;与手中任意牌型&#xff08;除大小王外&#xff09;组成新的牌型。 那么逢人配应该怎么用呢&#xff1f; 一、配炸弹 首配4头炸和同花顺&#xff0c;可配6头&am…

案例实践 | InterMat:基于长安链的材料数据发现与共享系统

案例名称&#xff1a;InterMat-基于区块链的材料数据发现与共享系统 ■ 建设单位 北京钢研新材科技有限公司 ■ 用户群体 材料数据上下游单位 ■ 应用成效 已建设10共识节点、50轻节点&#xff0c;1万注册用户 案例背景 材料是构成各种装备和工程的物质载体&#xff0c…

lettcode179.最大数

问题描述&#xff1a; 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整数。 示例一&#xff1a; 输入nums [10…

数字时代安全风险防范与保密科技创新

文章目录 前言一、新技术应用带来的保密挑战1.1 通过技术手段获取国家秘密和重要情报日益普遍1.2 新型信息技术存在的风险不容忽视 二、加强保密科技创新的必要性2.1 提高定密准确性2.2 及时变更密级或解密2.3 对失泄密事故案件进行自动高效的预警和初步处理 三、保密科技创新中…

文档加密软件最强推荐 8款最好的文件加密软件

文档加密软件最强推荐 8款最好的文件加密软件 加密软件的选择通常取决于具体的应用场景、加密需求以及对安全性的要求。以下是比较市场上一些知名加密软件的特点与优势&#xff0c;帮助您判断哪家更适合您的需求&#xff1a; 1.安企神 点击免费试用安企神 优势&#xff1a; …

书生·浦语大模型第二期实战营(4)笔记

Finetune 为什么要微调 适应下游任务 两种微调范式 上面的是增量训练 下面的是指令微调 数据格式 微调方案 lora&#xff1a; 在基座模型的基础上再套用一个小模型 XTuner 简介 快速上手 LnternLM2 1.8B 多模态LLM

五款3dmax常用插件推荐(含云渲染工具)

在三维建模和动画设计领域&#xff0c;3ds Max软件因其强大功能和灵活性而广受欢迎。为了进一步提升工作效率和创作质量&#xff0c;有许多插件可供选择。本文推荐五款常用3ds Max插件&#xff0c;帮助你更好实现复杂的模型和动效创作。 五款3dmax常用插件推荐 1、Kitchen Cab…

2024妈妈杯数学建模思路A题思路汇总分析 MathorCup建模思路分享

C题&#xff1a;移动通信网络中PCI规划问题 &#xff08;完整版内容放在文末了&#xff09; 2024MathorCup A题完整思路完整数据可执行代码后续高质量成品论文 l 难度评分: 3.5/5 l 开放度评分: 3/5 l 适合专业: 通信工程、计算机科学、电子工程 l 主要算法: 图论算法、…

JavaEE初阶Day 13:多线程(11)

目录 Day 13&#xff1a;多线程&#xff08;11&#xff09;常见的锁策略1. 悲观锁 vs 乐观锁2. 重量级锁 vs 轻量级锁3. 自旋锁 vs 挂起等待锁4. 可重入锁 vs 不可重入锁5. 公平锁 vs 非公平锁6. 互斥锁 vs 读写锁 synchronized实现原理1. 锁升级2. 锁消除3. 锁粗化 CAS Day 13…

CANfestival 主机进入预操作态(preOperational)自动发送复位节点指令。

核心是iam_a_slave ,这个是字典生产的时候自动生成的。

xftp、xshell连不上虚拟机解决方法

一、检查连接虚拟机ip看是否正确 查看虚拟机系统 IP ifconfig 二、检查虚拟机防火墙是否关闭 查看防火墙状态(ubuntu) sudo ufw status 关闭防火墙 sudo ufw disable 查看防火墙状态(centos) systemctl status firewalld.service 关闭防火墙 systemctl stop firewalld.se…