力扣第272场周赛

深入解析Gerber RS274X文件格式:从基础语法到实战应用 本文深入解析PCB制造的核心标准Gerber RS274X文件格式,详细介绍了其基础语法、坐标系统、功能码以及嵌入式光圈定义等关键特性。通过实战案例演示了如何解析和手写Gerber指令,并总结了常见错误与调试技巧,帮助PCB工程师掌握这一与制造工厂沟通的“通用语言”,确保设计准确无误地转化为实体电路板。 阅读详情

周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台

这场周赛是在课堂上模拟的, 总体来说比较简单, 但不幸被老师压力了。以下分享一下我的解题思路

如果你每天没有时间刷题的话, 可以看一下我写的东西, 我尽量讲解的通俗一些, 不会浪费你们太多的时间

1. 找出数组中的第一个回文字符串

给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 "" 。

回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串 。

 

示例 1:

输入:words = ["abc","car","ada","racecar","cool"]
输出:"ada"
解释:第一个回文字符串是 "ada" 。
注意,"racecar" 也是回文字符串,但它不是第一个

示例 2:

输入:words = ["notapalindrome","racecar"]
输出:"racecar"
解释:第一个也是唯一一个回文字符串是 "racecar" 

示例 3:

输入:words = ["def","ghi"]
输出:""
解释:不存在回文字符串,所以返回一个空字符串

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i] 仅由小写英文字母组成

解题思路:判断回文串, 回文串有两种:1. abba 2. abcba

按顺序遍历, 就能找到最左侧的回文串 

class Solution {
public:
    string firstPalindrome(vector<string>& words) {
        string a;
        for(int i=0;i<words.size();i++){
            int l=0; int r=words[i].size()-1; bool f=false;
            while(l<r){
                if(words[i][l]==words[i][r]){
                    l++;
                    r--;
                }else{
                    f=true;
                    break;
                }
            }
            if(!f){
                a=words[i];
                return a;
            }
        }
        return "";
    }
};

 2.向字符串添加空格

 给你一个下标从 0 开始的字符串 s ,以及一个下标从 0 开始的整数数组 spaces 。

数组 spaces 描述原字符串中需要添加空格的下标。每个空格都应该插入到给定索引处的字符值 之前 。

  • 例如,s = "EnjoyYourCoffee" 且 spaces = [5, 9] ,那么我们需要在 'Y' 和 'C' 之前添加空格,这两个字符分别位于下标 5 和下标 9 。因此,最终得到 "Enjoy Your Coffee" 。

请你添加空格,并返回修改后的字符串。

 

示例 1:

输入:s = "LeetcodeHelpsMeLearn", spaces = [8,13,15]
输出:"Leetcode Helps Me Learn"
解释:
下标 8、13 和 15 对应 "LeetcodeHelpsMeLearn" 中加粗斜体字符
接着在这些字符前添加空格。

示例 2:

输入:s = "icodeinpython", spaces = [1,5,7,9]
输出:"i code in py thon"
解释:
下标 1、5、7 和 9 对应 "icodeinpython" 中加粗斜体字符
接着在这些字符前添加空格。

示例 3:

输入:s = "spacing", spaces = [0,1,2,3,4,5,6]
输出:" s p a c i n g"
解释:
字符串的第一个字符前可以添加空格

提示:

  • 1 <= s.length <= 3 * 105
  • s 仅由大小写英文字母组成
  • 1 <= spaces.length <= 3 * 105
  • 0 <= spaces[i] <= s.length - 1
  • spaces 中的所有值 严格递增

解题思路:在spaces[i]处打一个标记, 然后遍历s的时候, 在标记处添加一个空格, 符合题意中的在给定索引之前添加一个空格

class Solution {
public:
    string addSpaces(string s, vector<int>& spaces) {
        string a;
        int n=s.size();
        vector<int> b(n);
        for(int i=0;i<spaces.size();i++){
            b[spaces[i]]=1;
        }
        for(int i=0;i<s.size();i++){
            if(b[i]){
                a+=" ";
            }
            a+=s[i];
        }
        return a;
    }
};

3. 股票平滑下跌阶段的数目

 给你一个整数数组 prices ,表示一支股票的历史每日股价,其中 prices[i] 是这支股票第 i 天的价格。

一个 平滑下降的阶段 定义为:对于 连续一天或者多天 ,每日股价都比 前一日股价恰好少 1 ,这个阶段第一天的股价没有限制。

请你返回 平滑下降阶段 的数目。

示例 1:

输入:prices = [3,2,1,4]
输出:7
解释:总共有 7 个平滑下降阶段:
[3], [2], [1], [4], [3,2], [2,1] 和 [3,2,1]
注意,仅一天按照定义也是平滑下降阶段

示例 2:

输入:prices = [8,6,7,7]
输出:4
解释:总共有 4 个连续平滑下降阶段:[8], [6], [7] 和 [7]
由于 8 - 6 ≠ 1 ,所以 [8,6] 不是平滑下降阶段

示例 3:

输入:prices = [1]
输出:1
解释:总共有 1 个平滑下降阶段:[1]

提示:

  • 1 <= prices.length <= 105
  • 1 <= prices[i] <= 105

 解题思路:用一个前缀和数组进行统计, 例如 3 2 1.. 前一个price的平滑下降阶段为3,前两个price的平滑下降阶段为3 2和2, 前三个price的平滑下降阶段为3 2 1/2 1/ 1

这不正好是一个前缀和数组吗?官方的标签也是数学。最后累加数组即可

class Solution {
public:
    long long getDescentPeriods(vector<int>& prices) {
        int n=prices.size();
        vector<int> a(n,1);
        a[0]=1;
        for(int i=1;i<prices.size();i++){
            if(prices[i-1]-prices[i]==1){
                a[i]=a[i-1]+1;
            }
        }
        long long ans=0;
        for(int i=0;i<a.size();i++){
            // cout<<a[i]<<endl;
            ans+=a[i];
        }
        return ans;
     }
};

4.使数组 K 递增的最少操作次数 

给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。

如果对于每个满足 k <= i <= n-1 的下标 i ,都有 arr[i-k] <= arr[i] ,那么我们称 arr 是 K 递增 的。

  • 比方说,arr = [4, 1, 5, 2, 6, 2] 对于 k = 2 是 K 递增的,因为:
    • arr[0] <= arr[2] (4 <= 5)
    • arr[1] <= arr[3] (1 <= 2)
    • arr[2] <= arr[4] (5 <= 6)
    • arr[3] <= arr[5] (2 <= 2)
  • 但是,相同的数组 arr 对于 k = 1 不是 K 递增的(因为 arr[0] > arr[1]),对于 k = 3 也不是 K 递增的(因为 arr[0] > arr[3] )。

每一次 操作 中,你可以选择一个下标 i 并将 arr[i] 改成任意 正整数。

请你返回对于给定的 k ,使数组变成 K 递增的 最少操作次数 。

示例 1:

输入:arr = [5,4,3,2,1], k = 1
输出:4
解释:
对于 k = 1 ,数组最终必须变成非递减的。
可行的 K 递增结果数组为 [5,6,7,8,9],[1,1,1,1,1],[2,2,3,4,4] 。它们都需要 4 次操作。
次优解是将数组变成比方说 [6,7,8,9,10] ,因为需要 5 次操作。
显然我们无法使用少于 4 次操作将数组变成 K 递增的。

示例 2:

输入:arr = [4,1,5,2,6,2], k = 2
输出:0
解释:
这是题目描述中的例子。
对于每个满足 2 <= i <= 5 的下标 i ,有 arr[i-2] <= arr[i] 。
由于给定数组已经是 K 递增的,我们不需要进行任何操作。

示例 3:

输入:arr = [4,1,5,2,6,2], k = 3
输出:2
解释:
下标 3 和 5 是仅有的 3 <= i <= 5 且不满足 arr[i-3] <= arr[i] 的下标。
将数组变成 K 递增的方法之一是将 arr[3] 变为 4 ,且将 arr[5] 变成 5 。
数组变为 [4,1,5,4,6,5] 。
可能有其他方法将数组变为 K 递增的,但没有任何一种方法需要的操作次数小于 2 次。

提示:

  • 1 <= arr.length <= 105
  • 1 <= arr[i], k <= arr.length

解题思路: 按k进行分组, 将原数组分成k个独立的子序列, 

对于每个子序列,我们需要计算使其变为非递减序列的最少修改次数。这等价于计算子序列的长度减去其最长非递减子序列的长度

计算最长非递减子序列可以用dp解决, 下面我用二分来进行替换

1. 其中 b[i] 表示长度为 i+1 的非递减子序列的最小末尾元素

2. 对于每个元素 x,找到数组 b 中第一个大于 x 的位置,并用 x 替换它(保持 b 的非递减性)

3.b 的最终长度即为最长非递减子序列的长度

4. 所以操作次数=当前子序列的长度-b.size()

class Solution {
public:
    int kIncreasing(vector<int>& arr, int k) {
        int n = arr.size();
        int ans = 0;
        for (int r = 0; r < k; ++r) {
            vector<int> a;
            for (int i = r; i < n; i += k) {
                a.push_back(arr[i]);
            }
            vector<int> b;
            for (int x : a) {
                auto it = upper_bound(b.begin(), b.end(), x);
                if (it == b.end()) {
                    b.push_back(x);
                } else {
                    *it = x;
                }
            }
            ans += a.size() - b.size();
        }
        return ans;
    }
};

//eg: arr = [4, 1, 5, 2, 6, 2], k=> 跳跃指数 => k=2
//arr[0]<=arr[2] / arr[1]<=arr[3] 
//k=3 => arr[0](4)>arr[3](2) 

感谢大家的支持和点赞,你们的支持是我创作的动力!对题目/代码有不理解的地方可以发布到评论区。

 

【STM32实物】基于STM32的扫地机器人/小车控制系统设计 扫地机器人系统采用分层结构设计,主要包括底层硬件控制层、中间数据处理层和上层用户交互层。底层硬件控制层负责对各个硬件模块进行控制和数据采集,中间数据处理层负责对采集到的数据进行处理和解算,上层用户交互层负责与用户进行交互并显示系统状态信息。 阅读详情

相关推荐

保姆级教程:用STM32单片机实现国标交流充电桩的CP信号检测(附完整代码)

本文详细介绍了基于STM32单片机实现国标交流充电桩CP信号检测的全流程,包括硬件设计、软件架构和充电控制实现。通过分压电路设计、ADC配置和状态机逻辑,确保充电过程的安全与可靠性,适用于新能源汽车充电桩开发。附完整代码和调试技巧,助力开发者快速掌握关键技术。

weixin_42641998的博客 251

LeetCode第272场周赛

2021.12.19LeetCode第272场周赛 2108. 找出数组中的第一个回文字符串 思路 逐个判断是否为回文串 判断时将两个指针放在头尾 逐一匹配 代码 class Solution { public: string firstPalindrome(vector<string>& words) { for (string s : words) { int i = 0, j = s.size() - 1; b

shenyuhan的博客 688

望获实时Linux与国产芯片协同:打造LinuxCNC数控机床的全栈国产化方案

本文探讨了如何通过望获实时Linux与飞腾、龙芯等国产芯片的深度协同,为LinuxCNC数控机床打造全栈国产化方案。望获实时Linux通过中断隔离等核心技术,提供亚微秒级确定性响应,解决了传统Linux系统实时性不足的痛点,使LinuxCNC得以稳定驱动高精度机床。该方案实现了从硬件、操作系统到应用软件的全栈自主可控,为工业控制领域提供了高性能、可定制的国产化选择。

weixin_29291069的博客 647

Leetcode 第272场周赛题解

Leetcode 第272场周赛题解(C++版)

Cain-James的博客 293

人工智能(AI)简史:推动新时代的科技力量

人工智能(AI,Artificial Intelligence)是计算机科学的一个分支,旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法,包括机器学习、深度学习、自然语言处理(NLP)、计算机视觉、专家系统等。

qq_17153885的博客 1万+

GLMM(广义线性混合模型)原理以及分析步骤

广义线性混合模型(GLMM)是生态与进化研究中处理非正态数据的定制化工具,能同时分析固定效应和随机效应。它通过链接函数连接响应变量与预测因子,支持二项分布、泊松分布等非正态数据。研究流程包括:明确分析目标(固定效应影响与随机效应方差)、选择合适变量与分布、数据验证、参数估算(需根据模型复杂度选择PQL、拉普拉斯近似等方法)及模型优化(检验过离散与残差,通过信息准则或假设检验筛选最优模型)。GLMM能有效解决传统方法无法处理的"伪重复"和推广性问题,为复杂生物数据提供可靠分析框架。

wewil_lwin的博客 4953

leetcode第272场周赛记录

第272场周赛记录得分排名情况赛题分析反思总结个人情况后续改进 得分排名情况 leetcode个人资料 本次得分12分 本次排名2134/4698 leetcode竞赛积分:1520-> leetcode竞赛全国排名:26561-> 赛题分析 一共四题: 5956找出数组中的第一个回文字符串 写出判断回文字符的方法即可 5757向字符串添加空格 时间复杂度肯定要控制在nlogn以内,n2是肯定不行的,所以用自带的insert方法是无法通过的;所以先拆解出所有的子字符串、再拼接起来,时间复杂度为

MichaelKongChina的博客 465

SAP Gateway OData V4 大数据集合分页机制详解,$skiptoken、Next Link 与服务端分页

更关键的是确定稳定排序方式,选择可靠的分页游标,限制单次 Response Size,正确生成 Next Link,让 Consumer 把 Next Link 当成不可解释的协议结果,并明确区分 Pagination、Delta Synchronization 和 Snapshot Consistency。从协议表达来看,请求没有问题。假设系统内部配置为每次最多返回 100 条,而数据库里一共存在 12580 条符合条件的销售订单,那么第一次响应只包含前 100 条,同时附带一个 Next Link。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 50

【解题报告】力扣 第 272 场周赛

动态规划、字符串、数学

英雄哪里出来 2184

Python爬虫:抓取交通工具班次数据(公交、地铁等时刻表)

然而,由于这些信息并不总是以开放的API形式提供,因此爬虫技术成为了获取和分析这些数据的有效途径。然而,由于很多公交公司没有公开API,通常我们通过抓取其网页中的时刻表数据来获取信息。通过这些步骤,您可以轻松抓取交通工具的班次信息,并进行进一步的数据分析,辅助交通规划和出行推荐系统的建设。在这篇文章中,我们将演示如何使用Python爬虫技术抓取公交、地铁等交通工具的班次和时刻表数据。我们可以将公交和地铁的数据合并,进行综合分析。我们可以进一步分析地铁班次的发车频率,甚至可以比较不同地铁线路的班次。

2201_76125261的博客 953

C#实现自己的远程桌面控制工具

1. 创建一个winform工程并添加RDP客户端COM组件。右击工具箱,然后点击选择项,选中下图所示组件并点击确定。为窗口加载时添加自动连接远程桌面代码。3.调试运行程序,验证远程桌面控制。拖放RDP控件到窗口中。2.编写远程桌面连接代码。

6086

LeetCode 第 272 场周赛总结

5956. 找出数组中的第一个回文字符串 我的代码:执行用时: 60 ms 内存消耗: 15.2 MB class Solution: def findStr(self, s): for i in range(len(s)//2): if s[i] != s[-i-1]: return False return True def firstPalindrome(self, words: List[str

一只不资深程序猿的博客 249

软件设计师高频考点—套路题

学习交流的总结

秩沅 2538

力扣272场周赛第三题 股票平滑下跌阶段的数目

跳转至 股票平滑下跌阶段的数目https://leetcode-cn.com/problems/number-of-smooth-descent-periods-of-a-stock/ 题目 给你一个整数数组prices,表示一支股票的历史每日股价,其中prices[i]是这支股票第i天的价格。 一个 平滑下降的阶段定义为:对于连续一天或者多天,每日股价都比 前一日股价恰好少 1,这个阶段第一天的股价没有限制。 请你返回 平滑下降阶...

weixin_51612593的博客 393

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

力扣272场周赛第四题 使数组 K 递增的最少操作次数

题目 给你一个下标从 0开始包含 n个正整数的数组arr,和一个正整数k。 如果对于每个满足k <= i <= n-1的下标i,都有arr[i-k] <= arr[i],那么我们称arr是 K递增 的。 比方说,arr = [4, 1, 5, 2, 6, 2]对于k = 2是 K 递增的,因为: arr[0] <= arr[2] (4 <= 5) ...

weixin_51612593的博客 532

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第272场力扣周赛

力扣第272场周赛

chan___的博客 252

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

第 272 场周赛(模拟+模拟+dp+LIS二分解法)

周赛地址 1.模拟 class Solution { public: string firstPalindrome(vector<string>& words) { for(auto& s:words){ int l = 0, r = s.size() - 1; int flag = 1; while(l < r){ if(s[l] != s[.

Prince_H_23的博客 298

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

LeetCode Hot 100 链表专题 三· 3 题(Java)

收录题目:2. 两数相加、19. 删除链表的倒数第 N 个结点、24. 两两交换链表中的节点。 统一结构:① 题目分析与解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结。 贯穿三题的两条主线:虚拟头结点 dummy(统一处理头结点被修改的场景)与 指针修改顺序(避免断链、丢引用)。

2401_88612756的博客 481

LeetCode 每日一题 2026/11/2-2026/11/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 174

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 197

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175

Hash表:两数之和、字母异位词分组、最长连续序列 [力扣 Hot100]

三道高频哈希表应用题:两数之和(利用HashMap快速查找补数)、字母异位词分组(排序后作为键分组)、最长连续序列(通过HashSet去重并仅从序列起点扩展)。核心思想均为借助哈希结构优化查找效率,避免重复计算。同时提及双指针等其他解法思路,体现算法设计中“空间换时间”的典型策略。

2403_87560480的博客 195

LeetCode 3926. 统计有效单词的出现次数【分组循环】

核心思想:用分组循环,一趟遍历字符串,把一个个单词切出来,丢进哈希表统计频次。,先把所有片段拼接成完整文本字符串。,依次返回每个单词在文本里的出现次数。难点:内层循环的判断条件,区分。

2503_92676540的博客 166

力扣第526场周赛心得理解

思路:因为题目要求尽可能求出最小的最大值,而满足要求最小公约数为2,作为题目要求最小的最大值,先去求出它的最大公约数再通过value判断最左边是否大于0,以及value本身是否大于0,而index的位置只能为中间或者最右边,所以最后输出只能是value本身或者在这个基础上加相隔相应距离次数的结果。两个整数,是指将第二个整数的所有十进制数位拼接在第一个整数的所有十进制数位之后。如果不存在这样的数组,返回 -1。4097. 合并整数后的最小值。返回所有合并后得到的整数中的。合并,依此类推,直到将。

目前主攻编程,目标是把屏幕上的红波浪线变成流畅运行的程序♪(^∀^●)ノシ 198

LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)

【LetMeFly】453.最小操作次数使数组元素相等:两次遍历(反向思维)

<font color="Pink">Tisfy的博客</font> 202
上一篇: 力扣第206场周赛
下一篇: 第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
一只鱼^_
博客等级 码龄3年 1073粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值