【LeetCode每日一题】——523.连续的子数组和
文章目录
- 一【题目类别】
- 二【题目难度】
- 三【题目编号】
- 四【题目描述】
- 五【题目示例】
- 六【题目提示】
- 七【解题思路】
- 八【时间频度】
- 九【代码实现】
- 十【提交结果】
一【题目类别】
- 前缀和
二【题目难度】
- 中等
三【题目编号】
- 523.连续的子数组和
四【题目描述】
- 给你一个整数数组
nums和一个整数k,如果nums有一个 好的子数组 返回true,否则返回false: - 一个 好的子数组 是:
- 长度 至少为
2,且 - 子数组元素总和为
k的倍数。
- 长度 至少为
- 注意:
- 子数组 是数组中 连续 的部分。
- 如果存在一个整数
n,令整数x符合x = n * k,则称x是k的一个倍数。0始终 视为k的一个倍数。
五【题目示例】
-
示例 1:
- 输入:nums = [23,2,4,6,7], k = 6
- 输出:true
- 解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。
-
示例 2:
- 输入:nums = [23,2,6,4,7], k = 6
- 输出:true
- 解释:[23, 2, 6, 4, 7] 是大小为 5 的子数组,并且和为 42 。
42 是 6 的倍数,因为 42 = 7 * 6 且 7 是一个整数。
-
示例 3:
- 输入:nums = [23,2,6,4,7], k = 13
- 输出:false
六【题目提示】
- 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
- 0 < = n u m s [ i ] < = 1 0 9 0 <= nums[i] <= 10^9 0<=nums[i]<=109
- 0 < = s u m ( n u m s [ i ] ) < = 2 31 − 1 0 <= sum(nums[i]) <= 2^{31} - 1 0<=sum(nums[i])<=231−1
- 1 < = k < = 2 31 − 1 1 <= k <= 2^{31} - 1 1<=k<=231−1
七【解题思路】
- 前缀和思想:设
prefix_sum[i]表示数组nums的前缀和,即prefix_sum[i]表示nums从第0到第i的元素的和。对于任意两个下标i和j(i < j),子数组nums[i+1:j+1]的和可以表示为prefix_sum[j] - prefix_sum[i]。 - 取模运算:我们需要找到两个前缀和
prefix_sum[j] 和 prefix_sum[i],使得它们的差prefix_sum[j] - prefix_sum[i]是k的倍数。我们可以通过对前缀和取模的方式(哈希表)来简化这个问题:如果prefix_sum[j] % k == prefix_sum[i] % k,那么prefix_sum[j] - prefix_sum[i]一定是k的倍数(同余定理)。 - 边界情况处理:
- 如果
k == 0,则子数组的和必须为0,所以需要特判。 - 由于子数组的长度至少为
2,所以当找到满足条件的前缀和时,还需要确保两个下标之间的距离大于等于2。
- 如果
- 最后返回结果即可
- 具体细节可以参考下面的代码
八【时间频度】
- 时间复杂度: O ( m ) O(m) O(m), m m m为传入的数组的长度
- 空间复杂度: O ( m i n ( m , k ) ) O(min(m, k)) O(min(m,k)), m m m为传入的数组的长度, k k k为计算得到的余数的个数
九【代码实现】
- Java语言版
class Solution {public boolean checkSubarraySum(int[] nums, int k) {// 用于存储取模后的前缀和与其下标, 初始化表示前缀和为0时在-1位置HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();hashMap.put(0, -1);// 初始化前缀和int prefixSum = 0;for (int i = 0; i < nums.length; i++) {// 更新前缀和prefixSum += nums[i];if (k != 0) {// 对 k 取模prefixSum %= k;}// 检查当前取模后的前缀和是否已经在哈希表中if (hashMap.containsKey(prefixSum)) {// 如果存在,并且下标差大于等于 2,则找到符合条件的子数组if (i - hashMap.get(prefixSum) > 1) {return true;}} else {// 不存在则记录当前前缀和对应的下标hashMap.put(prefixSum, i);}}return false;}
}
- Python语言版
class Solution:def checkSubarraySum(self, nums: List[int], k: int) -> bool:# 用于存储取模后的前缀和与其下标, 初始化表示前缀和为0时在-1位置hash_map = {0: -1}# 初始化前缀和prefix_sum = 0for i, num in enumerate(nums):# 更新前缀和prefix_sum += numif k != 0:# 对 k 取模prefix_sum %= k# 检查当前取模后的前缀和是否已经在哈希表中if prefix_sum in hash_map:# 如果存在,并且下标差大于等于 2,则找到符合条件的子数组if i - hash_map[prefix_sum] > 1:return Trueelse:# 不存在则记录当前前缀和对应的下标hash_map[prefix_sum] = ireturn False
- C++语言版
class Solution {
public:bool checkSubarraySum(vector<int>& nums, int k) {// 用于存储取模后的前缀和与其下标, 初始化表示前缀和为0时在-1位置unordered_map<int, int> hashMap;hashMap[0] = -1;// 初始化前缀和int prefixSum = 0;for (int i = 0; i < nums.size(); i++) {// 更新前缀和prefixSum += nums[i];if (k != 0) {// 对 k 取模prefixSum %= k;}// 检查当前取模后的前缀和是否已经在哈希表中if (hashMap.find(prefixSum) != hashMap.end()) {// 如果存在,并且下标差大于等于 2,则找到符合条件的子数组if (i - hashMap[prefixSum] > 1) {return true;}} else {// 不存在则记录当前前缀和对应的下标hashMap[prefixSum] = i;}}return false;}
};
十【提交结果】
-
Java语言版

-
Python语言版

-
C++语言版

相关文章:
【LeetCode每日一题】——523.连续的子数组和
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 前缀和 二【题目难度】 中等 三【题目编号】 523.连续的子数组和 四【题目描述】 给你一个…...
leetcode54:螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:matrix [[1,2,3,…...
全方面熟悉Maven项目管理工具(三)认识mvn的各类构建命令并创建、打包Web工程
1. POM(核心概念) 1.1 含义 POM: Project Object Model,项目对象模型。 DOM: Document Object Model,文档对象模型,和 POM 类似 它们都是模型化思想的具体体现 1.2 模型化思想 POM 表示将…...
MySQL中查询语句的执行流程
文章目录 前言流程图概述最后 前言 你好,我是醉墨居士,今天我们一起探讨一下执行一条查询的SQL语句在MySQL内部都发生了什么,让你对MySQL内部的架构具备一个宏观上的了解 流程图 概述 对于查询语句的SQL的执行流程,主要可以分为…...
【代码随想录Day47】单调栈Part02
42. 接雨水 题目链接/文章讲解:代码随想录 视频讲解:单调栈,经典来袭!LeetCode:42.接雨水_哔哩哔哩_bilibili 思路概述 问题理解:我们需要计算在给定柱子高度之间可以接住的雨水总量。雨水的量取决于柱子的高度和它们…...
Java全栈经典面试题剖析3】JavaSE面向对象2
目录 面试题2.12 Overload和Override的区别 面试题2.13 Overload方法是否可以改变返回值的类型? 面试题2.14 为什么方法不能根据返回类型来区分重载? 面试题2.15 构造器可不可以被重载或重写? 面试题2.16 在 Java 中定义⼀个不做事且没有…...
@JsonIgnoreProperties做接口对接时使用带来的好处
最近看到有个同事,在代码里面加了JsonIgnoreProperties这个注解,以前还真没有经常去用过,接口对接尤其是跟金蝶、用友等第三方,这个注解在接收数据是非常好用的;接下来带大家一起了解下具体的特性和使用方式 JsonIgno…...
SpringBoot整合mybatisPlus实现批量插入并获取ID
背景:需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了,在海量数据下其性能是最慢的。数据量小的情况下,没什么区别。 【1】saveBatch(一万条数据总耗时:2478ms) mybatisplus扩展包提供的:…...
实战RAG第一天——llama_index向量索引,查询引擎,搜索知识库问答,全部代码,保姆级教学
一、llama_index简介 llama_index(以前称为 GPT Index)是一个用于构建、查询、索引大型文档和数据集的开源框架。它的核心功能是帮助开发者将大语言模型(LLM)与自己的数据集无缝集成,从而进行知识库的构建、查询等任务。llama_index 使用 Python 编写,并结合了多种大语言…...
大数据治理
大数据治理是指对大数据的管理和控制,以确保数据的质量、可用性、安全性和合规性。随着大数据技术的不断发展,企业和组织面临着越来越多的数据管理挑战,如数据质量问题、数据安全问题、数据合规问题等。大数据治理成为了企业和组织应对这些挑战的重要手段。 一、大数据治理…...
云计算作业
关闭防火墙 停用Linux 挂载 下载nginx程序 启动nginx程序 连接网卡配置文件并且修改 更改模式为静态手动,并且分别修改ip地址,网关地址,dns 激活 创建自定义文件 定义server模块 监听地址 设置目录 匹配 激活网址根目录 创建目录文…...
复制文件到U盘提示:对于目标文件系统,文件过大
查看U盘属性的文件系统是否为FAT32,需将其改为NTFS 方法一 Win R 输入cmd打开命令行,输入以下命令(注:f为U盘盘符) convert f: /fs:ntfs /x方法二 格式化U盘,右键点击U盘进行格式化,文件系…...
SpringBoot+Swagger2.7.0实现汉化(2.8.0不行)
场景 SpringBootSwagger2实现可视化API文档流程: SpringBootSwagger2实现可视化API文档流程_swagger 可视化端口-CSDN博客 上面SpringBoot中使用swagger的效果 上面使用的是swagger2.8.0,且在线API是英文的。现在要将其进行汉化。 汉化效果 实现 首先打开sprin…...
c++ 散列表
散列表(Hash Table)是一种高效的数据结构,广泛用于实现快速的键值对存储。 基本概念 散列表使用哈希函数将键映射到数组的索引。其主要优点在于平均情况下提供常数时间复杂度的查找、插入和删除操作。 哈希函数: 将键映射到一个固定大小的…...
Windows通过netsh控制安全中心防火墙和网络保护策略
Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口(禁用/启用)前&am…...
UML(Unified Modeling Language,统一建模语言)
UML(Unified Modeling Language,统一建模语言)是一种标准化的图形化语言,用于软件工程中的可视化建模。UML由Grady Booch、James Rumbaugh和Ivar Jacobson共同开发,他们各自的工作(Booch方法、OMT方法和OOS…...
深⼊理解指针(2)
目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. ⼆级指针 5. 指针数组 6. 指针数组模拟⼆维数组 1. 数组名的理解 我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[…...
Ubuntu中MySQL远程登录设置
mysql单独放在一台Ubuntu服务器上,我远程连接不上。可能是安装的时候忘记设置远程登录了。事后补救措施如下: MySQL 绑定地址配置问题 MySQL 可能只绑定了 localhost,无法接受来自外部主机的连接。你需要检查 MySQL 的配置文件 /etc/mysql/…...
typescript 中封装一个 class 来解析接口响应数据
在TypeScript中,封装一个类来解析接口响应数据是一个常见的做法,它允许你将与接口响应相关的逻辑封装在一个可复用的单元中。下面是一个示例,展示了如何定义一个TypeScript类来解析一个假设的API接口响应数据。 首先,我们定义一个…...
[LeetCode] 21. 合并两个有序链表
题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 […...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
