力扣第470场周赛

告别有线:用PVE直通无线网卡,打造一台真正的‘无线’Win10软路由/测试机 本文详细介绍了如何通过PVE直通无线网卡技术,构建全无线Win10软路由或测试机。从硬件选型、PVE环境配置到PCIe和USB双模直通技术,逐步指导实现Wi-Fi AP和蓝牙连接功能,为家庭实验室和小型办公环境提供灵活高效的网络解决方案。 阅读详情
AI摘要

本文详细分析LeetCode第470场周赛四道题目,涵盖交替和计算、异或非零最长子序列、移除k-平衡子串及无零数对统计。重点涉及模拟、位运算、栈应用与数位DP等核心算法思想,适合提升编程竞赛解题能力。

题目链接如下:

https://leetcode.cn/contest/weekly-contest-470/

Q1. 计算交替和

给你一个整数数组 nums。

交替和 定义为:将 nums 中偶数下标位置的元素 相加 ,减去 奇数下标位置的元素。即:nums[0] - nums[1] + nums[2] - nums[3]...

返回表示 nums 的交替和的整数。

示例 1:

输入: nums = [1,3,5,7]

输出: -4

解释:

偶数下标位置的元素是 nums[0] = 1 和 nums[2] = 5,因为 0 和 2 是偶数。
奇数下标位置的元素是 nums[1] = 3 和 nums[3] = 7,因为 1 和 3 是奇数。
交替和为 nums[0] - nums[1] + nums[2] - nums[3] = 1 - 3 + 5 - 7 = -4。
示例 2:

输入: nums = [100]

输出: 100

解释:

唯一的偶数下标位置的元素是 nums[0] = 100,因为 0 是偶数。
没有奇数下标位置的元素。
交替和为 nums[0] = 100。

提示:

1 <= nums.length <= 100
1 <= nums[i] <= 100

解题思路:按题意进行模拟

class Solution {
public:
    int alternatingSum(vector<int>& nums) {
        int tot=0;
        for(int i=0;i<nums.size();i++){
            if(i&1) tot-=nums[i];
            else tot+=nums[i];
        }
        return tot;
    }
};

Q2. 按位异或非零的最长子序列

给你一个整数数组 nums。
返回 nums 中 按位异或(XOR)计算结果 非零 的 最长子序列 的长度。如果不存在这样的 子序列 ,返回 0 。

子序列 是一个 非空 数组,可以通过从原数组中删除一些或不删除任何元素(不改变剩余元素的顺序)派生而来。

 

示例 1:

输入: nums = [1,2,3]

输出: 2

解释:

最长子序列之一是 [2, 3]。按位异或计算为 2 XOR 3 = 1,它是非零的。

示例 2:

输入: nums = [2,3,4]

输出: 3

解释:

最长子序列是 [2, 3, 4]。按位异或计算为 2 XOR 3 XOR 4 = 5,它是非零的。

 

提示:

1 <= nums.length <= 10^5
0 <= nums[i] <= 10^9

解题思路:

如果所有元素异或起来为 0,那么任何去掉一个元素的子序列,异或就变成非 0,答案为n-1

如果所有元素异或起来非0,那答案就为n

class Solution {
public:
    int longestSubsequence(vector<int>& nums) {
        int res=0,max_len=0,n=nums.size(); long long tot=0;
        for(int x: nums){
            res^=x;
            tot+=x;
        }
        if(res!=0) return n;
        if(n==1||tot==0) return 0;
        return n-1;
    }
};
// dp[i][j]; 以nums[i]结尾的异或值为j的非零子序列的长度

Q3. 移除K-平衡子字符串

给你一个只包含 '(' 和 ')' 的字符串 s,以及一个整数 k。
如果一个 字符串 恰好是 k 个 连续 的 '(' 后面跟着 k 个 连续 的 ')',即 '(' * k + ')' * k ,那么称它是 k-平衡 的。

例如,如果 k = 3,k-平衡字符串是 "((()))"。

你必须 重复地 从 s 中移除所有 不重叠 的 k-平衡子串,然后将剩余部分连接起来。持续这个过程直到不存在 k-平衡 子串 为止。

返回所有可能的移除操作后的最终字符串。

子串 是字符串中 连续 的 非空 字符序列。

解题思路:这种括号很容易想到用栈解决, 当k=1时, 遍历到右括号,如果栈顶元素是左括号匹配成功就弹出栈顶元素,否则就入栈, 当k>1 时, 可以用pair来捆绑相同的字符,来统计相同字符的出现次数

class Solution {
public:
    string removeSubstring(string s, int k) {
        vector<pair<char,int>> st;
        for(auto& x: s){
            if(!st.empty() && st.back().first==x) st.back().second+=1;
            else st.emplace_back(x,1);

            if(x==')' && st.size()>1 && st.back().second==k && st[st.size()-2].second>=k){
                st.pop_back();
                st.back().second-=k;
                if(st.back().second==0) st.pop_back();
            }
        }
        string res;
        for(auto& x: st){
            res+=string(x.second,x.first);
        }
        return res;
    }
};

Q4. 统计和为 N 的无零数对

一个 无零 整数是一个十进制表示中 不包含数字 0 的 正 整数。
给定一个整数 n,计算满足以下条件的数对 (a, b) 的数量:

a 和 b 都是 无零 整数。
a + b = n
返回一个整数,表示此类数对的数量。

 

示例 1:

输入: n = 2

输出: 1

解释:

唯一的数对是 (1, 1)。

示例 2:

输入: n = 3

输出: 2

解释:

数对有 (1, 2) 和 (2, 1)。

示例 3:

输入: n = 11

输出: 8

解释:

数对有 (2, 9)、(3, 8)、(4, 7)、(5, 6)、(6, 5)、(7, 4)、(8, 3) 和 (9, 2)。请注意,(1, 10) 和 (10, 1) 不满足条件,因为 10 在其十进制表示中包含 0。

 

提示:

2 <= n <= 10^15

解题思路:

设n的十进制字符串为s, 设当前数位 d=s[i], 我们需要将d拆分成两个[1,9]的数字, 

例如n=234,

对于最低位4, 不借位拆, {1,3} {2,2}, {3,1} , 一共3种

借位拆:原数变成220 + 14, 14可以拆分成 5 种

一般地,借位会影响当前数位的值,从而影响拆分方案数

1. 设当前数位d=s[i]

2. 如果低位(i+1) 发生了借位, 那么把d减少 1,表示借给低位一个 1

3. d 也可以向高位(i−1)借 1,把 d 增加 10

4. 特别地,如果 d=0,那么把 d 减少 1 后 d=−1,此时必须向高位借 1

情况1:无前导0

设 d=a+b, 其中a,b都是[1,9]中的正整数

分类讨论: 

1.  d 不向高位借 1,我们计算的是 [1,9] 中的两数之和等于 d 的方案数,即 (a,b)=(1,d−1),(2,d−2),…,(d−1,1),一共有 d−1 个。特别地,如果 d<2,那么无解。
2.  d 向高位借 1,我们计算的是 [1,9] 中的两数之和等于 d+10 的方案数,即 (a,b)=(d+1,9),(d+2,8),…,(9,d+1),一共有 9−d 个,或者说 19−(d+10) 个。

情况2:有前导0

如果当前拆分出来一个0, 那么这个数当前位之前的其他位就只能为0了,例如: d=a+b, a=0, b=d;

分类讨论: 

1. 如果d!=0, b=d,只有一种填法。如果 d<0 则必须向高位借 1

特别地,如果我们刚开始填前导零,那么 (a,b)=(0,d) 或者 (a,b)=(d,0) 是对称的。我们无需分别计算 a=0 和 b=0 的情况,只需计算其中一种情况,然后把方案数乘以 2

2. 如果 d=0,那么 b=d=0

如果 i>0,由于我们没有向高位借 1,那么 b 的高位至少有一个非零数字,b 前面不能都是 0。此时无解。

否则 i=0,两个数的最高位都是 0,这是合法的。例如 100=49+51,49 和 51 的百位都是前导零

根据上面的讨论,定义 dfs(i,borrowed,isNum) 表示在 [0,i] 中填数字,且满足如下约束时的方案数:

1. borrowed=true 表示被低位(i+1)借 1。
2. isNum=true 表示右边所填数位没有 0(无前导零)。

递归边界:如果 i<0,那么 borrowed 必须是 false。是 false 则返回 1,不是则返回 0。

递归入口:为了获知低位的行为(是否借 1),要从最低位开始递归,即 dfs(∣s∣−1,false,true)。

class Solution {
    int fun(int b) {
        return max(min(b - 1, 19 - b), 0);
    }
public:
    long long countNoZeroPairs(long long n) {
        string d = to_string(n);
        int e = d.size();
        vector f(e, array<array<long long, 2>, 2>({{-1, -1}, {-1, -1}}));
        auto g = [&](this auto&& g, int h, bool i, bool j) -> long long {
            if (h < 0) return !i;
            long long& k = f[h][i][j];
            if (k != -1) return k;

            int l = d[h] - '0' - i;
            k = 0;

            if (j) {
                k = g(h - 1, false, true) * fun(l);
                k += g(h - 1, true, true) * fun(l + 10);
            }

            if (h < e - 1) {
                if (l) {
                    k += g(h - 1, l < 0, false) * (j + 1);
                } else if (h == 0) {
                    k++;
                }
            }

            return k;
        };
        return g(e - 1, false, true);
    }
};

感谢大家的点赞和关注,你们的支持是我创作的动力!

祝大家国庆节快乐!!! ---2025.10.7

 

【DDR5 PCB走线SI/PI仿真调试】详细全攻略 问题场景发现症状优化措施过孔Stub效应TDR波形尖峰,信号反射严重使用盲孔,背钻减少Stub,降低Via数量串扰过大眼图闭合,误码率增加增加走线间距,插入地线隔离,减少平行长度电源阻抗过高PDN谐振导致纹波大多频率去耦,靠近电源引脚布置多档电容,合理分层信号时序失配优化走线长度匹配,避免信号走线跨层跳变DDR5设计不仅是硬件的挑战,更是仿真能力的考验。掌握SI/PI仿真,理解信号背后的物理本质,才能真正把握高速接口的“灵魂”! 阅读详情

相关推荐

两张 300I Duo 部署 Qwen3.5‑32B

开发者成功使用两张华为300IDuo(共4颗Ascend310P3芯片)部署Qwen3/Qwen3.5的30B/32B模型,并公开详细步骤。关键点包括:硬件需两张300IDuo(每芯片44GB显存),软件需CANN≥24.1和MindIE2.3.0专用镜像。部署流程涵盖驱动安装、模型下载(需修改为FP16格式)、容器启动、张量并行配置(TP=4)等环节。实测显示每芯片显存占用20-35GB,系统稳定运行。该方案已在知乎等平台验证可行,适用于Qwen3.5-32B等同类模型。

evering的博客 2247

第 470 场周赛Q1——3701. 计算交替和

第 470 场周赛Q1——3701. 计算交替和解析

要努力去发光,而不是被照亮~ 60

解决Word中英文混排的5个常见排版问题(含单词换行、间距调整等)

本文详细解析Word中英文混排的5大常见排版问题,包括单词换行、间距调整、标点混用等,提供专业解决方案。通过设置段落格式、调整兼容性选项和使用字体组合等技巧,帮助用户轻松解决文档排版难题,提升专业性和阅读体验。

vim8coder的博客 1329

第 470 场周赛Q2——3702. 按位异或非零的最长子序列

第 470 场周赛Q2——3702. 按位异或非零的最长子序列解析

要努力去发光,而不是被照亮~ 81

SAP FI 提示没有为会计年度0 定义版本2025 GP626

SAP 错误 GP626 是一个常见的系统消息,通常表示某个会计年度的版本(如版本 0)未被定义或未激活。:在执行某些事务(如创建采购订单、过账凭证或维护成本中心)时,系统会检查相关版本是否已定义。的“Settings for Each Fiscal Year”界面中,选择一个已激活的会计年度。的“Settings for Each Fiscal Year”界面中,找到未激活的会计年度。:在控制范围(Controlling Area)中,未为指定的会计年度定义版本 0。如果没有,添加或复制现有年度的设置。

GAVIN 2487

基于FPGA与红外成像的眼动追踪系统设计与实现(教学向)

本文详细介绍了基于FPGA与红外成像的眼动追踪系统设计与实现。通过红外摄像头采集图像,利用FPGA进行实时图像处理和红外瞳孔追踪,结合Verilog编程实现多目标检测与瞳孔定位。该系统适用于嵌入式视觉教学,展示了硬件搭建、算法优化及实时显示的完整流程。

g5h6i7j的博客 823

可爱宝宝力扣刷题集目录

阿勒八叉

zhuruihe2014的博客 941

ChatIE:基于ChatGPT的零样本信息抽取实战指南

信息抽取是自然语言处理中的核心任务,旨在从非结构化文本中自动识别并结构化关键信息,如实体、关系及事件。传统方法依赖大量标注数据训练专用模型,流程复杂且成本高昂。随着大语言模型的发展,通过提示工程引导模型理解任务,实现了无需训练数据的零样本抽取能力,极大降低了技术门槛与应用成本。这种范式将信息抽取重构为多轮对话问题,通过分阶段提问引导模型逐步输出结构化结果,在快速原型验证、领域适配及小规模数据探索中展现出显著技术价值。本文以ChatIE项目为例,深入解析如何利用ChatGPT API,通过精心设计的提示词与两

weixin_30540691的博客 403

Leetcode 3703. Remove K-Balanced Substrings

Leetcode 3703. Remove K-Balanced Substrings

codename_cys的博客 367

嵌入式音频架构 - AudioWeaver 整体概念

AudioWeaver 是DSP Concept公司推出的基于嵌入式平台的音频框架。由AWE Core embedded processing engine 和 Audio Weaver Designer IDE 组成。 Audio Weaver Designer 有三个版本,ST Edition, Standard Edtion 和 Pro Edtion。 Audio Weaver Designer界面: Audio Weaver 的整体使用架构: AWD算法流文件,AWS配置脚本文件,AWB嵌入式b

甲客实验室 6869

Python数据可视化 Pyecharts 制作 Map 地图

大家好,我是Mr数据杨。想象一下,作为一名军师,如诸葛亮或郭嘉,'Map’就如同那战争的沙盘,兵马行动的轨迹,都需要准确的地图作为基础。‘基本设置’,就如同摆设这张战争沙盘,规定棋子的起始位置。‘数据配置选项’和’地图数据项’,就好比是军师们手中的情报,了解各路诸侯的兵力、粮草、地形等重要信息,以便于他们更好地布局。‘Demo’则代表着练兵之地,军师们可以在此基于已有数据,试验各种战术。

Mr数据杨 4万+

LeetCode交替和问题解析与优化技巧

交替和是数组处理中的基础算法问题,通过正负交替累加数组元素实现特定计算。其核心原理是利用元素索引的奇偶性决定运算符号,可表示为数学表达式(-1)^i * nums[i]。这种模式在信号处理(如数字滤波器设计)和金融分析(如收益损失净计算)中有广泛应用。从工程实践看,直接遍历法(时间复杂度O(n))和基于数学特性的生成器表达式是两种典型实现,前者更注重性能,后者强调代码简洁性。解题时需要特别注意空数组等边界条件处理,这是算法鲁棒性的关键。LeetCode等编程竞赛常以此类问题考察基础编码能力与数学思维转换能力

weixin_34176694的博客 351

彻底解决JDK安装包点击后无反应

jdk双击无法安装,jdk双击没反应,jdk安装包双击后没反应。

renkai721的专栏 8937

D.二分查找-二分答案-其他——540. 有序数组中的单一元素+LCR 070. 有序数组中的单一元素

D.二分查找-二分答案-其他——540. 有序数组中的单一元素解析

要努力去发光,而不是被照亮~ 327

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

一轮复习——E.位运算模型总结

一轮复习——E.位运算模型总结

要努力去发光,而不是被照亮~ 1122

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

2401_88612756的博客 352

IDEA的使用指南

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

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的博客 198

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的博客 197

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

【算法学习笔记】LeetCode 15:三数之和(排序 + 双指针)

使用sort()对数组进行排序。理解排序后双指针的移动原理。使用外层循环固定一个数字。使用左右指针寻找另外两个数字。使用continue和while实现去重。理解的执行逻辑。将三层循环优化为排序 + 双指针,使时间复杂度从 O(n³) 降低到 O(n²)。

aqiu111111的博客 156

LeetCode100 15. 三数之和

本题通过排序+双指针优化三数之和。先对数组排序,外层遍历固定第一个数,内层用左右指针查找另两个数,使三数之和为0。通过剪枝(当前数>0则终止)和去重(跳过重复元素)提升效率。相比暴力或哈希法,该方法时间复杂度为O(n²),空间O(1),更高效优雅。

Shaoxingzong的博客 321
上一篇: 牛客小白月赛121
下一篇: 苍穹外卖[操作步骤+讲解]
一只鱼^_
博客等级 码龄3年 1073粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值