天南之城的后花园

记录精彩的程序人生

文章

AC自动机

520. 检测大写字母 我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如 "USA" 。 单词中所有字母都不是大写,比如 "leetcode" 。 如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。 给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。 示例 1: 输入: word = "USA" 输出: true 示例 2: 输入: word = "FlaG" 输出: false 思路 ac表示当前状态,state表示输入状态 由第一个字母大小写决定ac初状态 word[0]大写:ac初状态0 word[0]小写:ac初状态2 当ac初状态0时(即首字母大写):下一个字母可以大写,也可以小写 当ac初状态2时(即首字母小写):下一个字母只能小写 当ac状态为1时(即前n个字母均大写):下一个字母只能大写 当ac状态为2时(即当前字母小写):下一个字母只能小写 以上状态转移失败均跳转到ac=4,具体流程如图所示。 python实现: class Solution: def detectCapita....

原地标记/交换

原地标记/交换 一、原地标记 题干:题目限制空间复杂度 思路: step1:想出空间o(n)map方法 step2:以原数组下标做o(n)map方法的key,想办法在数据上做手脚 step3:再遍历时,检查数据是否被做了手脚 448. 找到所有数组中消失的数字 class Solution { public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> res; int size=nums.size(); for(auto num:nums){ int temp = (num - 1) % size; nums[temp] += size; } for(int i=0;i<size;i++){ if(nums[i]<=size){ res.push_back(i+1); } } return res; } }; 442. 数组中重复的数据 class Solution {....

原地翻转

189. 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入: nums = [-1,-100,3,99], k = 2 输出: [3,99,-1,-100] 解释: 向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100] 以矩阵的观点 \begin{matrix} C=[A,B] \\ C^T=[B^T,A^T]\\ 目标:[B,A]=[(B^T)^T,(A^T)^T] \end{matrix} 此题用R表示翻转 \begin{matrix} C=[A,B] \ \ \ C^R=[B^R,A^R]\\ 目标:[B,A]=[(B^R)^R,(A^R)^R] \end{matrix} 操作 结果 ....

前缀和:一维+二维

前缀和 特征 求「连续段」区域和 分类 一维前缀和 303 二维前缀和 304 通用公式 ans = sum[j] - sum[i - 1]。 例子 303. 区域和检索 - 数组不可变 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right 实现 NumArray 类: NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + ... + nums[right] ) 示例 1: 输入: ["NumArray", "sumRange", "sumRange", "sumRange"] [[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]] 输出:....

leetcode刷题记录:数组-414. 第三大的数

数组的遍历 485、495、414、628 414. 第三大的数 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出: 1 解释: 第三大的数是 1 。 示例 2: 输入:[1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 。 示例 3: 输入:[2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。 此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。 提示: 1 <= nums.length <= 104 -231 <= nums[i] <= 231 - 1 进阶: 你能设计一个时间复杂度 O(n) 的解决方案吗? 思路 方法一:堆排序 略 方法二:set容器排序+去重 class Solution { public: int thirdMax(vector<int>& nums) { set<int> s;//排序队列 for(in....

leetcode刷题记录:数组-495. 提莫攻击

数组的遍历 485、495、414、628 495. 提莫攻击 在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。 当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。 正式地讲,提莫在 t 发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。 给你一个 非递减 的整数数组 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒时对艾希发起攻击,以及一个表示中毒持续时间的整数 duration 。 返回艾希处于中毒状态的 总 秒数。 示例 1: 输入: timeSeries = [1,4], duration = 2 输出: 4 解释: 提莫攻击对艾希的影响如下: 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。 第 4 ....

力扣刷题指南

共534题(含多解题,实际527题) 一. 数组 题目分类 题目编号 数组的遍历 485、495、414、628 统计数组中的元素 645、697、448、442、41、274 数组的改变、移动 453、665、283 二维数组及滚动数组 118、119、661、598、419 数组的旋转 189、396 特定顺序遍历二维数组 54、59、498 二维数组变换 566、48、73、289 前缀和数组 303、304、238 二. 字符串 题目分类 题目编号 字符 520 回文串的定义 125 公共前缀 14 单词 434、58 字符串的反转 344、541、557、151 字符的统计 387、389、383、242、49、451、423、657、551、696、467、535 数字与字符串间转换 299、412、506、539、553、537、592、640、38、443、8、13、12、273、165、481 子序列 392、524、521、522 高精度运算 66、67、415、43、306 字符串变换 482、6、68 字符串匹配 28、686、459、214 中心拓展法 ....

记录精彩的程序人生

© 2025 天南之城的后花园

Powered by Bolo
Theme bolo-sakura by Mashiro
浏览 50929 文章 43 评论 11
蜀ICP备2023008301号

主题 | Theme