每日算法-250531

article/2025/6/21 14:15:57

每日算法学习记录 - 250531

今天完成了两道 LeetCode 题目,主要用到了前缀和的思想。记录如下:


1. 2559. 统计范围内的元音字符串数

题目

Problem 2559 Screenshot

思路

前缀和

解题过程

我们可以先预处理出一个前缀和数组 nums,其中 nums[i] 表示 words 数组中从下标 0 到下标 i(包含 i)的字符串里,以元音字母开头且以元音字母结尾的字符串的总个数。

预处理完成后,对于每个查询 [left, right]

  • 如果 left == 0,则区间 [0, right] 内满足条件的字符串数量就是 nums[right]
  • 如果 left > 0,则区间 [left, right] 内满足条件的字符串数量为 nums[right] - nums[left - 1]

复杂度

  • mwords 数组的长度,nqueries 数组的长度。
  • 时间复杂度: O ( m + n ) O(m + n) O(m+n)
    • 预处理前缀和数组 nums:遍历 words 数组一次,对每个单词调用 isVowelisVowel 操作检查首尾字符,可视为 O ( 1 ) O(1) O(1)。总共 O ( m ) O(m) O(m)
    • 处理 n 个查询:每个查询通过前缀和数组 O ( 1 ) O(1) O(1) 计算。总共 O ( n ) O(n) O(n)
    • 因此,总时间复杂度为 O ( m + n ) O(m + n) O(m+n)
  • 空间复杂度: O ( m ) O(m) O(m)
    • 用于存储前缀和数组 nums

Code

class Solution {public int[] vowelStrings(String[] words, int[][] queries) {int n = queries.length, m = words.length;int[] ret = new int[n], nums = new int[m];nums[0] = isVowel(words[0]);for (int i = 1; i < m; i++) {nums[i] = nums[i - 1] + isVowel(words[i]);}for (int i = 0; i < n; i++) {int left = queries[i][0], right = queries[i][1];ret[i] = left == 0 ? nums[right] : nums[right] - nums[left - 1];}return ret;}private int isVowel(String s) {int n = s.length();if ((s.charAt(0) == 'a' || s.charAt(0) == 'e' || s.charAt(0) == 'i' || s.charAt(0) == 'o' || s.charAt(0) == 'u') && (s.charAt(n - 1) == 'a' || s.charAt(n - 1) == 'e' || s.charAt(n - 1) == 'i' || s.charAt(n - 1) == 'o' || s.charAt(n - 1) == 'u')) {return 1;}return 0;}
}

2. 3152. 特殊数组 II

题目

Problem 3152 Screenshot

思路

前缀和

解题过程

一个数组 nums 的子数组 nums[from...to] 是“特殊”的,当且仅当其中所有相邻元素的奇偶性都不同。

我们可以预处理一个前缀和数组 prefixBadPairsprefixBadPairs[i] (for i > 0) 表示在 nums 数组的 nums[0...i] 部分中,有多少对相邻元素 (nums[k-1], nums[k]) (其中 1 <= k <= i) 具有相同的奇偶性(我们称之为“坏对”)。prefixBadPairs[0] 可以设为 0。

对于一个查询 [from, to]

  • 如果 from == to,子数组只有一个元素,根据定义它总是特殊的。
  • 如果 from < to,我们需要检查 nums[from...to] 中是否存在“坏对”。
    这些“坏对”可能发生在 (nums[from], nums[from+1]), (nums[from+1], nums[from+2]), …, (nums[to-1], nums[to])
    • prefixBadPairs[to] 包含从 (nums[0],nums[1])(nums[to-1],nums[to]) 的所有坏对。
    • prefixBadPairs[from] 包含从 (nums[0],nums[1])(nums[from-1],nums[from]) 的所有坏对。
    • 他们的差值 prefixBadPairs[to] - prefixBadPairs[from] 即为从 (nums[from],nums[from+1])(nums[to-1],nums[to]) 范围内的坏对数量。
  • 如果这个差值为 0,则说明子数组 nums[from...to] 中没有相邻元素奇偶性相同,该子数组是特殊的,结果为 true。否则,结果为 false

复杂度

  • Nnums 数组的长度,Mqueries 数组的长度。
  • 时间复杂度: O ( N + M ) O(N + M) O(N+M)
    • 预处理 prefixBadPairs 数组需要 O ( N ) O(N) O(N) 时间。
    • 处理 M 个查询,每个查询 O ( 1 ) O(1) O(1) 时间。
  • 空间复杂度: O ( N ) O(N) O(N)
    • 用于存储 prefixBadPairs 数组。

Code

class Solution {public boolean[] isArraySpecial(int[] nums, int[][] queries) {int n = nums.length, m = queries.length;boolean[] ret = new boolean[m];int[] prefixBadPairs = new int[n];for (int i = 1; i < n; i++) {prefixBadPairs[i] = prefixBadPairs[i - 1];if ((nums[i] % 2) == (nums[i - 1] % 2)) {prefixBadPairs[i]++;}}for (int i = 0; i < m; i++) {int from = queries[i][0], to = queries[i][1];ret[i] = (prefixBadPairs[to] - prefixBadPairs[from] == 0);}return ret;}
}

http://www.hkcw.cn/article/grqEOmWgUN.shtml

相关文章

CTFHub-RCE eval执行

观察源代码 我们可以发现源代码是request请求&#xff0c;所以我们可以通过GET或者POST请求&#xff0c;利用cmd参数进行命令执行 判断是Windows还是Linux 用GET请求 /?cmdsystem(ipconfig); 无回显 说明不是Windows系统 /?cmdsystem(ifconfig); 可以发现有回显&…

MCP架构深度解析:从基础原理到核心设计

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

MySql(九)

目录 条件查询 1&#xff09;准备一张表 2&#xff09;插入数据 3&#xff09;条件查询格式 1---比较运算符 >大于 2---比较运算符 < 小于 3---比较运算符 > 大于等于 4---比较运算符 < 小于等于 5---比较运算符 ! 不等于 6---比较运算符 <> 不等于 7---比较…

赛博算命之“帝王之术”——奇门遁甲的JAVA实现

个人主页 文章专栏 文章目录 个人主页文章专栏 #前言#背景介绍#原理分析**一、干支系统计算**1. **四柱干支生成**2. **旬首与空亡判断** **二、九宫格与洛书模型**1. **地盘固定排布**2. **天盘动态移动** **三、阴阳遁与局数计算**1. **阴阳遁判断**2. **局数计算** **四、九…

C++ 栈(Stack)与队列(Queue)深度解析:从原理到实战

一、栈&#xff08;Stack&#xff09;&#xff1a;后进先出&#xff08;LIFO&#xff09;的线性结构 1. 核心特性与应用场景 特性&#xff1a;仅允许在栈顶进行元素的插入&#xff08;push&#xff09;和删除&#xff08;pop&#xff09;操作&#xff0c;遵循 “后进先出” 原…

【C++高级主题】命令空间(五):类、命名空间和作用域

目录 一、实参相关的查找&#xff08;ADL&#xff09;&#xff1a;函数调用的 “智能搜索” 1.1 ADL 的核心规则 1.2 ADL 的触发条件 1.3 ADL 的典型应用场景 1.4 ADL 的潜在风险与规避 二、隐式友元声明&#xff1a;类与命名空间的 “私密通道” 2.1 友元声明的基本规则…

Python Day38 学习

继续昨日的内容浙大疏锦行 学习一下两种机制&#xff1a;try-except机制和try-except-else-finally机制 try-except 摘自讲义 try&#xff1a;把你认为可能会出错的代码放在这里。 except&#xff1a;如果 try 块里的代码真的出错了&#xff08;从出错开始就不会继续执行t…

linux 1.0.7

用户和权限的含义与作用 linux中的用户和文件 用户的权限是非常重要的 而且有些程序需要使用管理员身份去执行 这些都是非常重要的 不可能让所有的人拥有所有的权限 这样的工具可以避免非法的手段来修改计算机中的数据 linux之所以安全还是权限管理做的很棒 每个登录的用户都有…

BFD 基本工作原理与实践:如何与 VRRP 联动实现高效链路故障检测?

BFD 基本工作原理与实践&#xff1a;如何与 VRRP 联动实现高效链路故障检测&#xff1f; &#x1f310; BFD 的基本原理BFD 主要特点BFD 工作机制 &#x1f500; 为什么 VRRP 需要 BFD&#xff1f;&#x1f527; BFD VRRP 配置实战&#xff08;华为设备&#xff09;&#x1f4…

python中将一个列表样式的字符串转换成真正列表的办法以及json.dumps()和 json.loads()

今天学习python的web.py&#xff0c;返回的内容为列表样式的字符串&#xff0c;如下 string_data "[(13.212.95.888, 8000, 10), (13.212.95.999, 8000, 10)]" 此时&#xff0c;如果想提取第一个元素&#xff0c;也就是(13.212.95.888, 8000, 10)&#xff0c;不能…

C++:指针(Pointers)

目录 什么是指针&#xff1f; 为什么需要指针&#xff1f; 1. 访问堆&#xff08;Access Heap&#xff09; 2. 资源管理&#xff08;Resource Management&#xff09; 3. 参数传递&#xff08;Parameter Passing&#xff09; 如何声明和使用指针&#xff1f; 如何利用指…

Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!

在数字化时代&#xff0c;PDF文件以其稳定性和通用性成为了文档交流和存储的热门选择。无论是阅读、编辑、转换还是转曲&#xff0c;大家对PDF文件的操作需求日益增加。因此&#xff0c;一款出色的PDF处理软件不仅要满足多样化的需求&#xff0c;还要通过简洁的界面和强大的功能…

RabbitMQ 高级特性

准备工作 1. 创建 Spring 项目 2. 引入依赖 3.修改配置文件 RabbitMQ官网 AMQP 0-9-1 Protocol Extensions | RabbitMQ 消息确认 消息确认机制 生产者发送消息,到达消费者后,可能会有以下情况: 1.消息处理成功 2.消息处理异常 RabbitMQ 向消费者发送消息之后,会把消息删除…

机器学习:欠拟合、过拟合、正则化

本文目录&#xff1a; 一、欠拟合二、过拟合三、拟合问题原因及解决办法四、正则化&#xff1a;尽量减少高次幂特征的影响&#xff08;一&#xff09;L1正则化&#xff08;二&#xff09;L2正则化&#xff08;三&#xff09;L1正则化与L2正则化的对比 五、正好拟合代码&#xf…

电路学习(二)之电容

电容的基本功能是通交流隔直流、存储电量&#xff0c;在电路中可以进行滤波、充放电。 1.什么是电容&#xff1f; &#xff08;1&#xff09;电容定义&#xff1a;电容器代表了器件存储电荷的能力&#xff0c;通俗来理解是两块不连通的导体与绝缘的中间体组成。当给电容充电时…

第十二节:第二部分:集合框架:Collection集合的遍历方式:迭代器、增强for循环、Lambda、案例

迭代器遍历集合 增强for循环遍历集合 Lambda表达式遍历集合 代码&#xff1a; 代码一&#xff1a;使用迭代器遍历集合 package com.itheima.day18_Collection;import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; // //使用迭代器遍历集合…

任务18:时间序列的模型

任务描述 知识点&#xff1a; 移动平均法指数平滑法ARIMA模型 重 点&#xff1a; 指数平滑法ARIMA模型 内 容&#xff1a; 创建时间序列索引绘制时间序列图形处理时间序列数据建立时间序列模型模型效果评估应用模型预测 任务指导 1. 移动平均法 移动平均法&#xff…

Java研学-MongoDB(一)

一 MongoDB 简介 MongoDB是一种高性能、开源的NoSQL数据库&#xff0c;采用面向文档的存储模型&#xff0c;以BSON&#xff08;Binary JSON&#xff09;格式存储数据&#xff0c;具有灵活的数据模型、强大的扩展性和丰富的功能特性&#xff0c;广泛应用于各类现代应用程序的数据…

【LLM相关知识点】 LLM关键技术简单拆解,以及常用应用框架整理(二)

【LLM相关知识点】 LLM关键技术简单拆解&#xff0c;以及常用应用框架整理&#xff08;二&#xff09; 文章目录 【LLM相关知识点】 LLM关键技术简单拆解&#xff0c;以及常用应用框架整理&#xff08;二&#xff09;一、市场调研&#xff1a;业界智能问答助手的标杆案例1、技术…

自动化立体仓库WCS的设计与实现

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。欢迎大家使用我们的仓储物流技术AI智能体。 新书《智能物流系统构成与技术实践》 新书《智能仓储项目出海-英语手册&#xff0c;必备&#xff01;》 完整版文件和更多学习资料&#xf…