- 博客(76)
- 资源 (1)
- 收藏
- 关注
原创 递归初相见——二叉树递归遍历的三种姿势
本文详细介绍了二叉树的四种遍历方式:先序、中序、后序和层次遍历,重点讲解了前三种递归遍历方法。文章通过示例二叉树和代码实现,深入解析了每种遍历的"旅行路线":先序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。强调递归遍历的关键在于明确递归式(遍历顺序)和递归边界(空节点返回)。文中提供了JavaScript实现代码,并逐步演示了遍历过程,帮助理解递归调用机制。最后建议通过刻意练习掌握这些基础遍历方法,为后续复杂题目打下坚实基础。
2026-03-03 17:45:44
452
原创 华为机考 ------ 天然蓄水库
摘要:本文提出了一种在X星山脉间建造最大蓄水库的算法。给定表示山脉高度的数组,通过双指针法寻找最优边界:左右指针初始位于数组两端,计算当前区间的蓄水量(最小高度×宽度-中间山脉总高度),移动较低侧的指针以探索更大蓄水可能。算法使用前缀和数组优化区间和计算,时间复杂度O(n)。示例输入[1,9,6,2,5,4,9,3,7]输出"16:19",表示选择第1和第6个山脉作为边界时最大蓄水量为19。若无解则返回0。该方案能高效处理长度≤100,000的山脉数据。
2026-02-25 15:42:20
494
原创 华为机考 ------ 统计大写字母个数
题目要求统计给定字符串中大写字母的个数。字符串由ASCII码32-126的字符组成,大写字母对应编码65-90(A-Z)。解决方案遍历字符串,检查每个字符编码是否在65-90范围内,满足则计数。示例输入"A101...O"输出2,因含两个大写字母A和O。JavaScript代码通过readline获取输入,遍历字符串统计符合条件字符数后输出。
2026-02-13 10:06:53
452
原创 华为机考 ------ 字符串字符匹配
摘要:该问题要求判断字符串s中的所有字符是否都存在于字符串t中。解决方案通过创建t的字符集合,然后检查s的每个字符是否都在该集合中来实现。输入为两个仅含小写字母的字符串(长度≤200),输出true/false。示例输入"bc"和"abc"时输出true,表明该方法能有效验证字符包含关系。JavaScript实现使用Set结构提升查询效率,通过every方法确保所有字符都被包含。
2026-02-13 10:04:28
59
原创 华为机考 ------ 公共子串计算
摘要:该问题要求计算两个字符串s和t的最长公共子串长度。使用动态规划方法,定义二维数组dp[i][j]表示以s[i-1]和t[j-1]结尾的公共子串长度。当字符匹配时,长度加1;否则重置为0。在填充dp表时记录最大值。JavaScript实现采用滚动数组优化空间复杂度,时间复杂度为O(n*m)。输入为两个长度≤150的小写字母字符串,输出最长公共子串长度。
2026-02-10 10:37:54
52
原创 华为机考 ------参数解析
本文介绍了一个命令行参数解析程序的设计思路。该程序需要处理带空格的参数,并能识别双引号内的内容作为整体参数。解析规则包括:1)以空格为分隔符;2)双引号内的内容视为单个参数;3)参数长度不定。 解决方案采用状态跟踪法,通过设置inQuote标志区分引号内外状态:在引号内时忽略空格分隔,直到遇到结束引号。程序逐个字符处理输入,时间复杂度O(n),空间复杂度O(n)。示例展示了如何正确解析包含空格和引号的复杂参数。 该程序适用于需要精确解析命令行参数的场景,特别是处理包含空格的路径参数时非常实用。
2026-02-10 10:24:19
48
原创 华为机考 ------ 计算日期到天数转换
摘要:本文介绍了计算给定日期是该年第几天的方法。通过判断闰年(能被4整除但不能被100整除,或能被400整除)确定2月天数,然后累加前几个月的天数并加上当前日数。提供了两种JavaScript实现方案:使用switch语句的简洁方法和基于数组循环的清晰方法。输入格式为年月日三个数字,输出为该日期在当年的天数序号。示例展示了2012年12月31日(闰年第366天)和1982年3月4日(第63天)的计算结果。
2026-02-10 10:06:20
60
原创 华为机考 ------ 字符串通配符
本文介绍了通配符匹配问题的解决方案。通配符""可匹配0个或多个字符,"?"匹配单个字符,字母字符可匹配其大小写形式。使用动态规划方法,构建二维数组dp[i][j]表示模式串前i个字符是否能匹配目标串前j个字符。通过初始化处理空串和连续""的情况,定义字符匹配规则,并填充DP表进行状态转移,最终判断能否完全匹配。算法时间复杂度为O(mn),适用于长度不超过100的字符串。
2026-01-28 11:19:47
59
原创 华为机考 ------ 矩阵乘法计算量估算
摘要:本文介绍了一个计算矩阵链乘法运算量的算法。给定n个矩阵的行列维度和一个包含矩阵运算顺序的字符串表达式,通过栈结构处理括号嵌套的运算顺序。遇到右括号时弹出栈顶两个矩阵计算运算量,并将结果矩阵重新入栈;处理完所有括号后,继续处理剩余的矩阵乘法。算法确保矩阵维度匹配,并累计总运算量。JavaScript实现通过读取输入数据、构建矩阵映射、处理表达式字符串并输出最终结果,示例输入验证了算法的正确性。
2026-01-22 17:42:05
122
原创 华为机考 ------ 查找两个字符串a,b中的最长公共子串
摘要:本文介绍了求解两个字符串最长公共子串的问题。要求找出s和t的最长公共连续子串,若存在多个相同长度的解,则返回在较短字符串中最早出现的那个。输入为两个长度1-300的小写字母字符串,输出为满足条件的最长公共子串。解题思路可通过动态规划或滑动窗口方法实现。示例1输入"awa"和"abbaawbb"时输出"aa",示例2输入较长字符串时输出"jklmnop"。该问题主要考察字符串处理与子串匹配能力。
2026-01-22 16:45:46
126
原创 华为机考 ------ 找出字符串中第一个只出现一次的字符
摘要:本文描述了一个查找字符串中首个只出现一次的字符的算法问题。要求对输入的小写字母字符串进行遍历,统计字符频率后,找出第一个频次为1的字符,若不存在则返回-1。解题采用两次遍历法:第一次统计频率,第二次查找首个符合条件的字符。时间复杂度O(n),空间复杂度O(1)(因仅26个小写字母)。JavaScript实现通过对象记录频率并二次遍历完成检测。
2026-01-22 16:32:34
51
原创 35岁+的程序员,除了“被优化”和“送外卖”,还有这3条“黄金赛道”
回到最初的问题:如果有一天失业了,我读了这么多年的书,写了这么多年的代码,有什么用?作用巨大。读书和代码,赋予你的不仅仅是某项具体的技能,而是强大的逻辑思维能力、快速学习新知识的能力、以及面对复杂问题时的拆解能力。这些能力,是可迁移的,是通用的。那个在风雨中送外卖的年长者,值得我们尊敬,因为他们靠自己的劳动生存。而你,一个受过高等教育、有技术背景的大龄程序员,你的起点比他们高得多。你不必害怕“向下兼容”,你应该思考的是如何“向上突破”或“横向拓展”。35岁,不是职业生涯的终点,而是另一种精彩人生的起点。
2026-01-13 12:29:42
932
原创 华为机考 ------ DNA序列
G 和 C 的比例(定义为 GC-Ratio )是序列中 G 和 C 两个字母的总的出现次数除以总的字母数目(也就是序列长度)。要解决这个问题,我们需要在给定的DNA序列中找出长度为N的子串,使得该子串的GC-Ratio最高。GC-Ratio定义为子串中'G'和'C'字符的数量与子串长度的比值。给定一个很长的 DNA 序列,以及限定的子串长度 N ,请帮助研究人员在给出的 DNA 序列中从左往右找出 GC-Ratio 最高且长度为 N 的第一个子串。:对每个子串,统计其中'G'和'C'字符的数量。
2026-01-09 11:23:35
176
原创 华为机考 ------ 高精度整数加法
该题目要求处理两个超大整数(最多10^10000位)的加法运算。解题核心是模拟竖式计算方法:首先将两个数字字符串长度补齐,从最低位开始逐位相加并处理进位。JavaScript实现中,通过字符串操作完成数字对齐,使用循环逐位计算,最后处理可能的最高位进位。这种方法避免了直接使用BigInt类型,适用于任意长度的整数相加。示例展示了输入"9876543210"和"1234567890"时,正确输出它们的和"11111111100"。
2026-01-09 10:53:17
330
原创 华为机考 ------ 计算字符串的编辑距离
Levenshtein距离(编辑距离)用于计算两个字符串间的最小单字符编辑操作次数(插入、删除或替换)。本题要求实现一个动态规划算法:构建二维数组dp,其中dp[i][j]表示字符串s前i个字符与t前j个字符的最小编辑距离。初始化边界条件后,通过比较字符决定状态转移:若字符相同则继承左上值,否则取左(插入)、上(删除)、左上(替换)的最小值加1。该算法时间复杂度O(mn),空间复杂度O(mn),适用于长度≤1000的字符串。示例中展示了将"abcdefg"变为"abcdef&q
2026-01-09 10:42:19
124
原创 华为机考 ------ 截取字符串
题目要求截取字符串s的前k个字符。输入包含两行:字符串s和整数k。使用JavaScript的substring()或slice()方法,从索引0开始截取到索引k-1结束即可。示例代码展示了如何读取输入并输出结果。核心思路是直接调用字符串截取方法,无需复杂处理。
2026-01-09 09:42:07
70
原创 华为机考 ------ 四则运算
本文介绍了一种使用双栈法处理含多种括号的数学表达式的JavaScript解决方案。该方法通过操作数栈和运算符栈,按照运算符优先级和括号层级进行计算。算法首先统一括号格式,然后遍历表达式处理数字、括号和运算符。遇到右括号时计算括号内表达式,运算符则根据优先级处理。最终确保乘除优先于加减,并正确处理整数除法。解决方案包含预处理、优先级定义、运算函数和错误处理,能够准确计算包含小、中、大括号的合法表达式,输出符合要求的整数结果。
2026-01-08 13:34:09
322
原创 华为机考 ------ 名字的漂亮度
摘要:本文介绍如何计算给定字符串的"漂亮度"最大值。漂亮度定义为各字母权重(1-26且互不重复)乘以其出现次数的总和。核心策略是:统计字母频率,按频率降序分配权重(最高频率对应26,次高25,以此类推),然后计算总和。示例表明,如"zhangsan"的最大漂亮度为192。算法步骤包括:统计频率、排序频率、按权重计算总分。JavaScript实现展示了具体代码流程。该方案能高效处理长度达10^4的字符串。
2026-01-08 10:19:44
138
原创 华为机考 ------ 称砝码
摘要:本文描述了一个砝码称重问题,给定n种不同重量的砝码及其数量,要求计算这些砝码能称出的不同重量组合数(包括0)。通过动态处理每种砝码的可能数量,利用集合存储所有可能的重量组合,最终输出集合大小即为答案。示例展示了2种砝码(1和2)分别有2个和1个时,能称出0-4共5种重量的情况。算法核心是遍历每种砝码及其数量,更新重量集合,自动去重后统计结果。
2026-01-08 09:22:32
67
原创 华为机考 ------ 统计字符
摘要:该题目要求统计字符串中英文字母、空格、数字和其他字符的数量。输入为由ASCII码32-126字符组成的字符串(长度1-1000),需要分别统计四类字符的出现次数并按序输出。解决方案包括初始化计数器、遍历字符串、字符分类(使用正则表达式判断类型)和结果输出。JavaScript实现示例展示了如何通过循环和正则表达式进行字符分类统计,最终输出四个计数结果。
2026-01-08 09:22:09
310
原创 华为机考 ------ 判断两个IP是否属于同一子网
摘要:本文介绍了IP地址和子网掩码的基本概念及其应用。IP地址由4个0-255的十进制数组成,子网掩码是32位二进制数,由连续的1和0组成。通过将IP地址与子网掩码进行按位与运算,可以判断两台主机是否属于同一子网。文章提供了验证IP地址和子网掩码合法性的方法,并给出了判断两个IP是否属于同一子网的算法步骤。最后通过JavaScript代码示例展示了完整的解决方案,包括输入验证、子网掩码有效性检查及网络地址计算比较。
2026-01-07 11:19:07
93
原创 华为机考 ------ 字符串加密
本文描述了一种基于字母表替换的加密方法。该方法首先对给定的密钥字符串s进行去重处理,然后补充缺失的小写字母构建完整26字母表。加密时将明文字符串t中的每个字母替换为新字母表中对应位置的字母。示例展示了具体加密过程,并提供了JavaScript实现方案,包括去重处理、字母表补全和加密转换三个关键步骤。该加密方法适用于处理仅包含小写字母的字符串,输出结果为与明文等长的密文字符串。
2026-01-07 11:18:44
59
原创 华为机考 ------ 单词倒排
摘要:该问题要求将输入句子中的单词逆序排列,同时去除原有非字母分隔符并用单个空格连接。算法步骤包括:1)识别并提取连续的字母序列作为单词;2)将提取的单词数组逆序;3)用空格连接单词输出。输入字符串长度不超过10^4,每个单词长度1-20个字符。JavaScript解决方案通过遍历字符串、收集单词、反转数组和空格连接来实现功能。示例输入"$bo*ygi!r#l"输出为"lrgiybo"。
2026-01-07 11:18:18
47
原创 设计Vnode
如上,采用了位运算,在一次挂载任务中如上判断很可能大量的进行,使用位运算在一定程度上再次拉升了运行时性能。的层级最高,这样无论在哪里使用都希望它能够遮住全部内容,你可能会将其用在任何你需要蒙层的地方。组件要渲染的内容不受 DOM 层级关系限制,即可以渲染到任何位置,该问题将迎刃而解。我们之所以没有在本章中包含这些内容,是因为目前来讲,我们根本不需要这些属性,比如。的子节点,根元素并不是一个实实在在的真实 DOM,而是一个抽象的标识,即。类似,都需要一个唯一的标识,来区分其类型,目的是告诉渲染器如何渲染该。
2026-01-07 10:42:43
594
原创 Vue vnode设计原理深度解析:从虚拟DOM到极致性能优化
Vue的VNode设计是框架性能优化的核心所在。从Vue 2到Vue 3,VNode经历了从简单到复杂的演进过程,最终形成了以ShapeFlags、PatchFlags、Block Tree为核心的优化体系。VNode设计的核心思想轻量级抽象:用JavaScript对象代替真实DOM,减少操作开销编译时优化:在编译阶段分析模板,生成优化的渲染函数运行时优化:通过位运算和靶向更新,最小化Diff计算量跨平台能力:提供与平台无关的DOM表示,支持多端渲染。
2026-01-06 16:55:56
783
原创 华为机考 ------ 图片整理
摘要:本文介绍了一个字符串排序问题,要求将包含大小写字母和数字的字符串按照ASCII码值从小到大排序。解决方案是使用JavaScript的sort()方法,该方法默认按UTF-16码元值排序(等同于ASCII排序)。实现步骤包括:1)将字符串拆分为字符数组;2)用sort()排序;3)将数组重新合并为字符串。示例代码演示了完整的输入处理、排序和输出过程,适用于长度1-1000的字符串。
2026-01-06 16:34:32
210
原创 华为机考 ------ 整数与IP地址间的转换
本文摘要: IP地址与整数相互转换的原理是将IP的4个8位段(0-255)拼接为32位二进制数后转换为十进制整数。转换方法包括:1)IP转整数时,每段左移相应位数后按位或;2)整数转IP时,右移提取每8位。提供了JavaScript实现方案,包含输入验证、位运算和字符串两种解法,确保正确处理32位无符号整数范围。示例展示了10.0.3.193与167773121的互转过程,并处理了边界情况。
2026-01-06 16:34:16
98
原创 华为机考 ------ 密码截取
本文摘要: 题目要求找出给定字符串中的最长回文子串(正反读相同的字符串),忽略首尾无关字符。采用中心扩散法:遍历每个字符作为回文中心,向左右扩展直至字符不匹配,分别处理奇数(如"ABA")和偶数(如"ABBA")长度情况,记录最大长度。JavaScript实现通过双指针动态比较字符,最终输出最长回文子串长度。示例输入"ABBA"输出4,"12HHHHA"输出4。算法时间复杂度为O(n²),适用于长度≤2500的字符串。
2026-01-06 16:33:39
72
原创 华为机考 ------ 字符串合并处理
本文提出一个字符串处理算法,分为合并和调整两个阶段。合并阶段将两个字符串s和t拼接后,分别对奇偶位字符按ASCII码排序。调整阶段对每个字符进行转换:若为十六进制字符(0-9,a-f,A-F),则转换为4位二进制并翻转,再转回大写十六进制;否则保留原字符。示例演示了从输入"decfab"到输出"5D37BF"的完整转换过程。算法通过JavaScript实现,包括字符串排序、二进制转换和翻转等关键步骤,最终输出处理后的字符串。
2026-01-05 15:29:59
64
原创 华为机考 ------ 字符串加解密
该摘要描述了字符串加密解密规则及实现方法:加密规则要求字母后移一位并改变大小写(Z→a,A→b),数字加1(9→0);解密则是逆向操作。实现方案使用JavaScript,通过字符编码转换处理字母,数值运算处理数字,并建立加密/解密函数。程序读取两行输入(明文和密文),分别输出加密和解密结果。核心思路是通过字符类型判断和相应转换规则实现双向编解码。
2026-01-05 15:29:39
88
原创 有状态组件的设计
本文详细介绍了Vue组件插槽和VNode的实现原理。主要内容包括: 插槽机制:通过slots属性存储子节点,普通插槽和作用域插槽本质相同,都是返回VNode的函数 key和ref的实现:key用于diff优化,ref用于获取DOM或组件实例 parentVNode的作用:存储组件事件监听器,实现组件间通信 contextVNode的作用:建立组件父子关系链 el属性的含义:不同类型VNode对应的真实DOM引用方式 文章深入剖析了Vue组件系统的核心实现细节,包括插槽机制、组件通信、DOM挂载等关键技术点。
2026-01-05 10:32:00
658
原创 组件的本质
文章摘要:本文探讨了前端组件产出的本质变化,从传统模板引擎时代的HTML字符串转变为现代框架的Virtual DOM。通过对比jQuery模板引擎和Vue/React组件的实现方式,指出组件本质是一个数据到视图的转换函数。重点分析了Virtual DOM的分层优势,包括跨平台渲染和SSR支持,并介绍了组件的两种表示形式(函数式和类组件)及其VNode实现原理。组件产出从直接HTML变为VNode,体现了前端开发模式的演进。
2026-01-05 10:06:14
740
原创 从源码解读Vue生命周期
Vue生命周期钩子函数详解 Vue的生命周期钩子函数本质上是回调函数,在组件运行到特定阶段时触发。Vue提供了8个主要生命周期钩子: beforeCreate:实例创建前,无法访问数据 created:实例创建完成,可访问数据但无法操作DOM beforeMount:挂载前,虚拟DOM已创建 mounted:挂载完成,可操作DOM beforeUpdate:数据更新前 updated:更新完成 beforeDestroy:实例销毁前 destroyed:实例销毁后 使用注意事项: 除beforeCreate
2026-01-05 10:05:43
847
原创 华为机考 ------ 查找兄弟单词
摘要:本文定义了字符串的"兄弟单词"概念,即通过重新排序原字符串得到的不同新字符串。题目要求:1)统计给定n个字符串中是目标字符串x兄弟单词的数量;2)将这些兄弟单词按字典序排序后输出第k个。解题关键在于判断两字符串长度相同、排序后字符相同且与原串不同。JavaScript解决方案通过预处理目标字符串的排序形式,快速筛选符合条件的兄弟单词,最后进行统计和排序输出。示例展示了当存在兄弟单词时输出数量和第k个单词,否则仅输出数量0。
2026-01-04 13:44:42
52
原创 华为机考 ------ 密码验证合格程序
本文描述了一个密码验证程序的设计要求。合格密码需满足三个条件:1)长度≥8位;2)包含大写字母、小写字母、数字、特殊字符中至少三种;3)不能存在两个长度>2且不重叠的相同子串。程序采用JavaScript实现,通过字符类型检查和改进的子串重复检测算法进行验证。输入为多组测试数据,输出"OK"或"NG"表示验证结果。核心难点在于高效检测不重复子串条件,解决方案采用滑动窗口和哈希映射来优化性能。
2026-01-04 13:44:15
66
原创 华为机考 ------ 字符串排序
该摘要描述了一个字符串排序算法,要求:1) 按字母表顺序不区分大小写排序;2) 同一字母保持输入顺序;3) 非字母字符保留原位。算法步骤包括:分离字母和非字母字符,对字母进行稳定排序(使用localeCompare比较),最后重构字符串。JavaScript实现通过正则表达式过滤字母,排序后按原位置重组字符串。输入输出示例展示了大小写字母的排序结果及非字母字符的保留情况。
2026-01-04 13:43:55
62
原创 华为机考 ------ 删除字符串中出现次数最少的字符
本文介绍了一个字符串处理问题:给定一个小写字母字符串,删除出现次数最少的字符(若有多个则全部删除),保持其余字符顺序。输入字符串长度1-20,保证输出非空。解决方案包括:统计字符频率,找到最小值,过滤掉所有出现次数等于最小值的字符。示例展示了输入"aabcddd"删除最少出现的'b'和'c'后输出"aaddd"。提供了JavaScript实现代码,使用对象统计频率,Math.min找最小值,遍历字符串构建结果。
2026-01-04 13:43:34
57
原创 华为机考 ------ 简单密码
本文描述了一种密码变换方法:小写字母按九键键盘映射为数字(如abc→2),大写字母转小写后后移一位(Z→a),数字保持不变。给出了JavaScript实现方案,通过遍历字符并分类处理,最终输出转换后的密码字符串。输入示例"NowCoder123"经转换后输出为"o69d6337123"。
2026-01-04 13:43:09
66
原创 华为机考 ------ 识别有效的IP地址和掩码并进行分类统计
题目要求对输入的IP地址和子网掩码进行分类统计。IP地址分为A-E五类,私有IP单独统计,同时需验证地址和掩码的合法性。特殊IP(0...和127...)需跳过处理。 解题步骤: 读取输入并分割IP和子网掩码 验证IP格式和数值范围(0-255) 检查是否为特殊IP,若是则跳过 验证子网掩码是否合法(连续的1后接连续的0) 统计IP类别(A-E)和私有IP 输出七项统计结果:A/B/C/D/E类数量、错误数量、私有IP数量 关键点:正确处理特殊IP、严格验证掩码格式、同时满足多种分类条件时需多重统计。
2025-12-31 09:27:43
184
原创 华为机考 ------ 坐标移动
摘要:本文解决一个指令解析问题,验证并执行移动指令计算最终坐标。指令格式要求:以A/D/W/S开头,数字1-99,分号结尾。JavaScript方案通过分号分割指令,验证格式和数字范围后更新坐标。示例1执行合法指令后输出(10,-10),示例2因全部指令非法输出(0,0)。核心是字符串处理和条件验证,最终输出坐标结果。
2025-12-31 09:27:12
57
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅