Leetcode2381. 字母移位 II

【C++差分数组】2381. 字母移位 II|1793 给你一个小写英文字母组成的字符串 s 和一个二维整数数组 shifts ,其中 shifts[i] = [starti, endi, directioni] 。对于每个 i ,将 s 中从下标 starti 到下标 endi (两者都包含)所有字符都进行移位运算,如果 directioni = 1 将字符向后移位,如果 directioni = 0 将字符向前移位。 将一个字符 向后 移位的意思是将这个字符用字母表中 下一个 字母替换(字母表视为环绕的,所以 'z' 变成 'a')。类似的,将一个字符 向前 阅读详情

Every day a Leetcode

题目来源:2381. 字母移位 II

解法1:差分数组

用差分数组 diff 表示一段区间上的更新,即在 starti 变化量增加了 x,在 endi+1 变化量减少了 x(类比导数的概念)。

这里 x=2*directioni−1,把 0 和 1 变成 −1 和 1。

然后从小到大遍历 diff,累加变化量为 shift(类比积分的概念),这样对于第 i 个字符,其移位值就是 shift。

注意:

在这里插入图片描述

代码:

/*
 * @lc app=leetcode.cn id=2381 lang=cpp
 *
 * [2381] 字母移位 II
 */

// @lc code=start
class Solution
{
public:
    string shiftingLetters(string s, vector<vector<int>> &shifts)
    {
        // 特判
        if (shifts.empty())
            return s;

        int n = s.length();
        // 构造差分数组
        vector<int> diff(n + 1, 0);
        for (vector<int> &shift : shifts)
        {
            int start = shift[0];
            int end = shift[1];
            int move = shift[2] ? 1 : -1;
            diff[start] += move;
            diff[end + 1] -= move;
        }

        int shift = 0;
        // 计算最终字符串
        for (int i = 0; i < n; i++)
        {
            shift += diff[i];
            s[i] = (char)((s[i] - 'a' + (shift % 26) + 26) % 26 + 'a');
        }
        return s;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n+m),其中 n 是字符串 s 的长度,m 是数组 shift 的元素个数。

空间复杂度:O(n),其中 n 是字符串 s 的长度。

光电容积脉搏波PPG信号分析笔记 脉搏波信号PPG分析笔记 阅读详情

相关推荐

【MBD开发】Simulink中的枚举

01 什么是枚举 按百度百科的词条【枚举】是在编程语言中用来存储一组固定的常量。不同编程语言的枚举语法也不一样,以C语言为例。 typedef enum{ GEAR_P, //0:P挡 GEAR_R, //1:倒挡 GEAR_N, //2:空挡 GEAR_D, //3:前进}_GEAR; 上面枚举了一个_GEAR数据,用GEAR_P表示0,GEAR_R表示1……​​​​​​​ if(current_gear==GEAR..

f6723的博客 3096

LeetCode 2381. 字母移位 II

给你一个小写英文字母组成的字符串s和一个二维整数数组shifts,其中。对于每个i,将s中从下标starti到下标endi(两者都包含)所有字符都进行移位运算,如果将字符向后移位,如果将字符向前移位。将一个字符移位的意思是将这个字符用字母表中字母替换(字母表视为环绕的,所以'z'变成'a'类似的,将一个字符移位的意思是将这个字符用字母表中字母替换(字母表是环绕的,所以'a'变成'z'请你返回对s进行所有移位操作以后得到的最终字符串。"ace"

m0_56090828的博客 1049

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

【LeetCode】2381、字母移位 II

把 s 中下标为 [starti, endi] 左比右闭区间的字母, 向前或向后偏移一个字符.每个shifts[i] 为 [starti, endi, directioni] 的三元组。子区间的整体改变, 可联想到差分, 即差分数组两端的改变.

呆呆的猫的博客 1025

Datawhale~数据挖掘实践之序列问题处理~天池·资金流入流出预测-挑战Baseline~Day01~数据探索与分析

写在前面✍ 本系列笔记基于天池平台上“资金流入流出预测-挑战Baseline”学习赛,记录如何完整的打一次数据挖掘类比赛。同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对序列问题的处理有一定的独立思考能力和实践操作能力,可以将所学理论,用编码的形式和实际的问题得到深入。 第一篇,EDA Content: 初步了解赛题及数据 1.1 任务 1.2 用户基本信息数据 1.3 用户申购赎回数据 1.4 收益率表 1.5 银行间拆借利率表 1.6 提交格式 1.7 评分指标 EDA 1 初.

小卜妞的博客 2361

基于Android平台下的健康管理APP/基于android的健康管理系统

随着网络科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。Android技术作为当前最流行的操作平台,自然也存在着大量的应用服务需求。 本课题研究的是基于Android技术平台的健康管理APP,开发这款健康管理APP主要是为了帮助用户可以不用约束时间与地点进行所需信息。本文详细讲述了健康管理APP的界面设计及使用,主要包括界面的

m0_73706453的博客 1440

力扣2381.字母移位II

【代码】力扣2381.字母移位II。

Pisasama的博客 319

笔试题-2023-加特兰-数字IC设计【纯净题目版】

笔试题-2023-加特兰-数字IC设计【纯净题目版】

w0shishabi的博客 2249

python-leetcode-2381. 字母移位 II

可以使用来高效处理区间增减操作,避免逐个字符修改导致的低效性。

Lucy_wzw的博客 477

【OpenClaw企业级智能体实战】第13篇:1+N架构实战!OpenClaw多Agent数字员工军团搭建指南(含完整配置+路由策略+代码落地)

单Agent因“记忆负担重、Token消耗高、响应不精准”已难以满足复杂场景需求,而多Agent团队通过“1个编排者+N个执行者”的分工协作模式,能让效率提升300%以上。本文基于OpenClaw 2026稳定版,结合阿里云开发者社区实战案例,从核心认知、准备工作、实操流程、协作机制、安全配置五大维度,完整拆解多Agent团队搭建全流程。文中包含可直接复制执行的代码、详细配置模板、路由策略设置及常见问题排查,新手可在1-2小时内落地属于自己的“数字员工”军团,覆盖内容创作、技术支持、多平台运营等多场景。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 749

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

君逍遥o 1018

力扣2381. 字母移位 II

力扣2381. 字母移位 II 差分

2301_80219163的博客 249

18、改进的LSTM用于污染物浓度预测

本文探讨了改进的长短期记忆网络(MLSTM)在空气污染预测中的应用,重点分析了其对印度泰米尔纳德邦五个城市(金奈、塞勒姆、哥印拜陀、马杜赖和图蒂科林)的PM2.5、PM10、SO2和NO2四种污染物浓度的预测效果。通过与传统LSTM模型的对比实验,结果显示MLSTM在预测准确性和执行效率方面均优于LSTM。研究结果表明,MLSTM在空气质量预测领域具有较高的应用潜力,可为环境保护和空气质量管理提供有力支持。

j0k1l2m3n的博客 175

【数据结构-差分】力扣2381. 字母移位 II

对于每个 i ,将 s 中从下标 starti 到下标 endi (两者都包含)所有字符都进行移位运算,如果 directioni = 1 将字符向后移位,如果 directioni = 0 将字符向前移位。我们规定了向右移动时候为正,向左移动为负。输入:s = “abc”, shifts = [[0,1,0],[1,2,1],[0,2,1]]输入:s = “dztz”, shifts = [[0,0,0],[1,1,1]]最后,将下标从 1 到 1 的字符向后移位,得到 s = “catz”。

sjsjs11的博客 492

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【LeetCode每日一题】2381. 字母移位 II&&2406. 将区间分为最少组数 (差分数组)

通过两道leetcode真题深入了解差分数组在不同场景下的应用

qq_43720551的博客 996

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

leetcode 2381. Shifting Letters II(python)md

所以关键就在于我们怎么求出差分数组,根据差分数组的规律,我们在遍历 shifts 的时候,对于区间 [start, end] 的所有元素都加 n 的操作,可以变为将 sub[start] 加 n ,将 sub[end+1] 减 n 的操作,这样遍历 shifts 结束就可以得到完成的差分数组 sub ,然后经过计算就可以得到差分数组的前缀和 cur ,这样就可以知道每个 s[i] 的最终移动方向和距离,只需要对每个字符经过简单的字符变换和拼接变成新的 result 即可。= 0,则向后移动字符。

王大呀呀的博客 867

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode 2381. Shifting Letters II

【代码】LeetCode 2381. Shifting Letters II。

weixin_42383726的博客 433

leetcode 848. 字母移位 基础取模操作+前缀和

字母移位 有一个由小写字母组成的字符串 S,和一个整数数组 shifts。 我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的, ‘z’ 将会变成 ‘a’)。 例如·,shift(‘a’) = ‘b’, shift(‘t’) = ‘u’,, 以及 shift(‘z’) = ‘a’。 对于每个 shifts[i] = x , 我们会将 S 中的前 i+1 个字母移位 x 次。 返回将所有这些移位都应用到 S 后最终得到的字符串。 示例: 输入:S = “abc”, shifts = [3,5.

马角的逆袭的博客 357

LeetCode笔记:Biweekly Contest 85

LeetCode笔记:Biweekly Contest 85

codename_cys的博客 420

力扣 第85场双周赛

【代码】力扣 第85场双周赛。

qq_52765554的博客 247

LeetCode 双周赛 85 && 单周赛 307 总结反思

力扣。

m0_58068094的博客 919

[LeetCode85双周赛] [滑动窗口] [差分数组] [并查集]

差分数组可以把一个区间操作变为对两个数的操作,从而节省时间。正序为删除节点,求两边元素和。转换其为倒序,合并两边的元素。长度的窗口,向后滑动,若要离开窗口位置为白块,这题暴力做会超时,用差分数组会降到线性。的连续块,然后求其中每。,若要加入窗口位置为白块,个块中白色块最少个数。我们的目的是让所有的。

负负得正的博客 266

周赛补题(AcWing、力扣)

AcWing、力扣

qq_56407679的博客 454

LeetCode 85双周赛(补记)

仍然是3道题,第4题做了尝试,有基本思路(不像以前根本没时间和机会和第4题打照面),还算是有进步。什么时候能AK一次呢,还得继续加油。

vcj1009784814的博客 932

leetcode刷题类型

【代码】leetcode刷题类型。

weixin_53102215的博客 269

【力扣周赛】第 362 场周赛(⭐差分&匹配&状态压缩DP&矩阵快速幂优化DP&KMP)

斜着走,一步顶两步——相当于可以同时横着走和竖着走。那么只要满足垂直和水平方向中最长的那个距离就好了。排序之后按顺序枚举,每次比较和上个区间结束位置之间的关系。注意有个特例是:只走一步时,如果起点和终点相同就不可以了。

小威的博客 804
上一篇: Leetcode 第 381 场周赛题解
下一篇: Leetcode2406. 将区间分为最少组数
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值