- 博客(275)
- 收藏
- 关注
原创 剑指offer-54、字符流中第一个不重复的字符
可以直接使用哈希的数据结构来存取我们的字符,对与重复的字符可以对值进行统计或者标记都行。这里要用LinkedHashMap,因为题目要求到了要出现的第一个不重复的字符,所以如果不使用有序map的话,那么我们就不能保证取到的是第一个不重复的字符。请实现⼀个函数⽤来找出字符流中第⼀个只出现⼀次的字符。例如,当从字符流中只读出前两个字符" go “时,第⼀个只出现⼀次的字符是” g "。当从该字符流中读出前六个字符“ google “时,第⼀个只出现⼀次的字符是” l "。
2025-12-24 09:00:00
101
原创 剑指offer-53、表达数值的字符串
这道题,其实本质是状态的切换,最最重要的⼀点,是 E 出现之后,其实⼩数点和符号,和数字,都是可以再出现的,可以理解为 E 就是⼀个分割线。请实现⼀个函数⽤来判断字符串str是否表示数值(包括科学计数法的数字,⼩数和整数)。例如,字符串[“+100”,“5e2”,“-123”,“3.1416”,“-1E-16”] 都表示数值。但是[“12e”,“1a3.14”,“1.2.3”,“±5”,“12e+4.3”] 都不是数值。⾸先,初始化当前的索引index =0 ,字符串头部的空格需要跳过。
2025-12-23 09:00:00
764
原创 递归与分治算法
分治法(Divide and Conquer)是一种解决复杂问题的重要算法思想,其核心思想是将一个难以直接解决的大问题,分割成若干个规模较小的子问题,以便各个击破,最后将子问题的解组合起来,得到原问题的解。分治法的思想可以追溯到古代,但作为一种系统化的算法策略,它在计算机科学领域得到了极大的发展和应用。在递归中,一个复杂的问题被分解为相同类型但规模更小的子问题,直到达到一个简单到可以直接解决的基本情况(基准情况)。递归算法的妙处在于它能用简洁优雅的代码解决看似复杂的问题,但在使用时一定要注意。
2025-12-19 09:00:00
1004
原创 剑指offer-52、正则表达式匹配
例如,字符串" aaa “与模式” a.a “和” ab*ac*a “匹配,但是与” aa.a “和” ab*a "均不匹。请实现⼀个函数⽤来匹配包括’ . ‘和’ * ‘的正则表达式。说明:因为这⾥ c 为 0 个,a被重复⼀次, * 表示零个或多个a。注意:上⾯说的第⼀个字符是不是匹配,除了两个字符相等的情况,其实还有模式串的字符为’ . '的情况。说明:“.*” 表示可匹配零个或多个(‘*’)任意字符(‘.’)输⼊:“aad”,“c*a*d”输⼊: “aaa”,“a*a”输⼊:“”,“.*”
2025-12-18 09:00:00
719
原创 剑指offer-51、构建乘积数组
对每个B[i]都计算A中除A[i]外所有元素的乘积,双重循环,外层遍历B的每个位置,内层遍历A数组跳过当前元素。思路:left[i]表示A[0]到A[i-1]的乘积,right[i]表示A[i+1]到A[n-1]的乘积。给定⼀个数组A[0,1,…,n-1] ,请构建⼀个数组B[0,1,…: 如果把问题看作矩阵,B[i]就是去掉对角线元素A[i]后,该行所有元素的乘积。对于A ⻓度为1 的情况,B⽆意义,故⽽⽆法构建,因此该情况不会存在。输出:[120,60,40,30,24]输⼊:[1,2,3,4,5]
2025-12-17 09:00:00
126
原创 剑指offer-50、数组中重复的数字
但是上⾯的做法,不适合求解多个重复数字的例⼦,因为调换的时候,很容易将后⾯的数字换到前⾯去,就会导致求解出来不是第⼀个重复的数字(可以⽤来求解任意的重复数字),可能是第2,3…道有⼏个数字是重复的。例如,如果输⼊⻓度为 7 的数组 [2,3,1,0,2,5,3] ,那么对应的输出是第⼀个重复的数字 2。可以直接借助数组,因为所有数字都在 0 到 n-1 的范围内,⽤⼀个⼤⼩为 n 的数组,就可以对所有的数字进⾏统计个数,如果个数超过 1 ,那么肯定是重复的数字,如果没有重复的数字,则返回 -1;
2025-12-16 09:00:00
167
原创 字符串匹配算法
KMP算法的关键在于构建一个部分匹配表(也叫失败函数或者next数组),这个表记录了当匹配失败时,模式串指针应该回退到的位置,让算法跳过已知不可能匹配的位置,提高匹配效率。KMP算法是字符串处理中的经典算法,用来解决字符串匹配问题,理解它对提升算法设计能力还是很有帮助的。Sunday算法是另一种Boyer-Moore的变种,它关注的是文本串中模式串后面的字符。,时间复杂度平均为O(n+m),n是文本串长度,m是模式串长度。,时间复杂度是O(m+n),m是模式串长度,n是文本串长度。
2025-12-15 09:00:00
859
原创 查找算法详解
的数据集合,每次查找都将查找范围缩小为原来的一半,直到找到目标值或确定目标值不存在。二分查找要求数据必须是有序的,经常应用于数组等支持随机访问的数据结构里。在理想情况下,哈希查找的时间复杂度为 O(1),这就意味着无论数据规模多大,查找操作都能在常数时间内完成,这是哈希查找相比其他查找算法(如二分查找、线性查找)的最大优势。哈希查找(Hash Search),又称散列查找,是一种高效的查找算法,它用哈希函数将数据转换为数组下标,然后直接访问数组中的元素。哈希查找的核心思想是。
2025-12-12 09:00:00
595
原创 剑指offer-49、把字符串转换成整数
对于⼩于0 的情况,假设最⼩值是-128 ,那么sum 是数字部分 128 , 如果当前sum ⼤于 12 ,那么就⼀定超出,或者sum == 12 ,但是个位数⼤于8 ,乘以10 ,相加也会⼤于128 ,不符合要求,所以直接返回0。但是在这个过程中,我们依然需要考虑数字溢出的问题,针对这种情况,我们可以在加和之前判断,针对⼤于0的情况,如果⼤于最⼤值整除10,或者等于最⼤值整除10,但是个位数超过了,都直接返回0。解释:加粗的字符串为已经读⼊的字符,插⼊符号是当前读取的字符。输⼊:s = “42”
2025-12-11 09:00:00
605
原创 剑指offer-48、不使⽤加减乘除实现加法
写⼀个函数,求两个整数之和,要求在函数体内不得使⽤ + 、 - 、 * 、 / 四则运算符号。将加法分解为「无进位和」+「进位值」,循环直到进位为0。将迭代过程转为递归调用,基础案例是进位为0。
2025-12-10 09:00:00
164
原创 剑指offer-47、求1+2+3...+n
n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字及条件判断语句( A?递归可以模拟出循环,⼏乎所有的for 循环操作,都可以以递归的⽅式实现。这个问题,如果直接使⽤ for 循环,超级简单,重拳出击,时间复杂度为 O(n)。但是上⾯的做法,同样是使⽤乘法,也违反了原则,那么要不使⽤循环,也不适⽤乘法,怎么做呢?+(n-1)+n = n * (n+1)/2 ,思路:将n(n+1)用位运算实现,然后右移1位代替除以2。
2025-12-09 09:00:00
364
原创 十大经典排序算法
内部排序:数据记录在内存中进行排序。外部排序:因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等,本文只讲解内部排序算法。
2025-12-08 09:00:00
2135
原创 数据结构——树
树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。树的定义:树是⼀种数据结构,它是由n(n≥1)个有限节点组成⼀个具有层次关系的集合。把它叫做“树”是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。每个节点有零个或多个⼦节点没有⽗节点的节点称为根节点每⼀个⾮根节点有且只有⼀个⽗节点除了根节点外,每个⼦节点可以分为多个不相交的⼦树一棵树中的任意两个结点有且仅有唯一的一条路径连通。一棵树如果有 n 个结点,那么它一定恰好有 n-1 条边。
2025-12-05 09:00:00
1366
原创 剑指offer-46、孩⼦们的游戏(圆圈中最后剩下的数)
有个游戏是这样的:⾸先,让 n 个⼩朋友们围成⼀个⼤圈,⼩朋友们的编号是0~n-1。然后,随机指定⼀个数 m ,让编号为0的⼩朋友开始报数。每次喊到 m-1 的那个⼩朋友要出列唱⾸歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下⼀个⼩朋友开始,继续 0…直到剩下最后⼀个⼩朋友,可以不⽤表演,并且拿到⽜客礼品,请你试着想下,哪个⼩朋友会得到这份礼品呢?使用循环链表模拟小朋友围成的圈,将小朋友存入链表,循环删除第m个元素。分析每次被删除的数字规律,直接计算出最后的数字,不需要模拟。
2025-12-04 09:00:00
299
原创 剑指offer-45、扑克牌顺⼦
初始化⼀个最⼩牌 14 ,最⼤牌 0 ,直接使⽤ set 保存数组的元素,如果 set 中已经存在该元素,那么我们直接放回 false ,如果 set 中不存在该元素,则将该元素放进 set 中,判断该元素是否⼩于最⼩牌,⼩于则更新最⼩牌,判断该元素是否⼤于最⼤牌,如果⼤于最⼤牌,则更新当前最⼤牌。5张牌 【A,0,3,0,5】 就可以变成“ 1,2,3,4,5 ”(⼤⼩王分别看作 2 和 4 ),这样就组成了顺⼦。输⼊五张牌,如果牌能组成顺⼦就输出true,否则就输出 false。
2025-12-03 09:00:00
422
原创 剑指offer-44、翻转单词序列
Java ⾥⾯有切割字符串的⽅法,直接⽤空格进⾏分隔,分隔成为多个单词,然后从字符串数组的后⾯开始,每⼀个字符拼接上⼀个空格,但是,值得注意的⼀点是,当只剩下⼀个字符串的时候,也就是索引为 0 的时候,不需要再拼接空格。有⼀个值得注意的点,就是空格的问题,我们压栈的时候,跟随着拼接上空格即可,最后⼀个字符不压⼊空格。给定⼀个句⼦,将句⼦中的单词进⾏翻转,注意,单词内部的字符顺序不改变,改变的是单词与单词之间的顺序,⽐如“ I am a coder. ”,翻转之后变成“ coder. a am I ”。
2025-12-02 09:00:00
336
原创 数据结构-哈希表
像线性数据结构在查找的时候,⼀般都是使⽤= 或者!= ,在折半查找或者其他范围查询的时候,可能会使⽤< 和> ,理想的时候,我们肯定希望不经过任何的⽐较,直接能定位到某个位置(存储位置),这种在数组中,可以通过索引取得元素。那么,如果我们将需要存储的数据和数组的索引对应起来,并且是⼀对⼀的关系,那不就可以很快定位到元素的位置了么?只要通过函数f(k) 就能找到k 对应的位置,这个函数f(k) 就是hash 函数。
2025-12-01 09:00:00
730
原创 线性数据结构
数组(Array)是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。数组是⼀种线性的结构,⼀般在底层是连续的空间,存储相同类型的数据,由于连续紧凑结构以及天然索引⽀持,查询数据效率⾼。假设我们知道数组a 的第 1 个值是 地址是 296,⾥⾯的数据类型占 2 个 单位,那么我们如果期望得到第 5 个: 296+(5-1)*2 = 304 , O(1) 的时间复杂度就可以获取到。
2025-11-28 09:00:00
678
原创 剑指offer-43、左旋转字符串
汇编语⾔中有⼀种移位指令叫做循环左移( ROL ),现在有个简单的任务,就是⽤字符串模拟这个指令的运算结果。对于⼀个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列S=”abcXYZdef” ,要求输出循环左移3位后的结果,即“ XYZdefabc ”。值得注意的是, n 可能⼤于 str 的⻓度,那么这种情况下我们应该先对 str 的⻓度取余,保持严谨。这道题⽬的意思就是将前⾯ n 位,移动到后⾯,那么我们可以直接从第 n+1 位开始,遍历到最后⼀个,再拼接上前⾯ n 个。
2025-11-27 09:00:00
176
原创 剑指offer-42、和为S的两个数字
由于数组 nums[] 是有序的,也就是第⼀个数字是最⼩的,第⼆个数字是最⼤的,那么我们使⽤⼀个指针 i 指向数组第⼀个元素,⼀个指针 j 指向数组最后⼀个元素。输⼊⼀个递增排序的数组和⼀个数字 S ,在数组中查找两个数,使得他们的和正好是 S ,如果有多对数字的和等于 S ,输出两个数的乘积最⼩的。如果 nums[i] + nums[j] < sum ,则说明和太⼩了,⽐ sum 还要⼩,则左边的指针i需要左移⼀步,即是 i++。输⼊:[1,2,4,7,11,15],15。返回值:[4,11]
2025-11-26 09:00:00
134
原创 剑指offer-41、和为S的连续正数序列
⼩明很喜欢数学,有⼀天他在做数学作业时,要求计算出 9~16 的和,他⻢上就写出了正确答案是 100。没多久,他就得到另⼀组连续正数和为 100 的序列: 18,19,20,21,22。注意的是,起点我们只需要遍历到 sum/2 的位置即可,因为⼤于 sum/2 的索引,任何两个数的和都⼤于 sum ,不符合条件。如果和⼤于 sum ,则说明连续⼦数组已经超过,该索引起点的不满⾜条件,直接 break。针对每⼀个索引起点,都计算后续的连续⼦数组的和,并且将元素存到临时 list 中。
2025-11-25 09:00:00
126
原创 SpringCloud 常见面试题(三)
API网关(API Gateway)是一种中间层服务器,用于集中管理、保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点,提供了一组统一的接口来管理和控制API的访问。路由转发:API网关根据请求的URL路径或其他标识,将请求路由到相应的后端服务。通过配置路由规则,可以灵活地将请求分发给不同的后端服务。负载均衡:API网关可以在后端服务之间实现负载均衡,将请求平均分发到多个实例上,提高系统的吞吐量和可扩展性。
2025-11-24 09:00:00
916
原创 SpringCloud 常见面试题(二)
配置中心是一个用于配置集中化管理目支持动态更新、分发配置文件的工具(服务)。它实现了配置的统一管理和动态同新,当配置信息发生变化时,配置中心可以自动通知服务实例进行配置更新,这样就可以实例无需重启即可应用最新的配置,从一定程度上减少了系统访问的空窗期,非常灵活方便Spring Cloud Config:Spring 提供的分布式配置管理工具,支持从 Git、SVN 等版本控制系统加载配置Apollo:由携程开源的配置管理中心,支持配置的实时推送和权限管理。
2025-11-21 09:00:00
679
原创 剑指offer-40、数组中只出现⼀次的数字
遍历完成之后,需要将次数为 1 的数字捞出来,同样是遍历 hashmap ,由于只有两个满⾜条件,我们设置⼀个标识变量,初始化为1,如果找到第⼀个满⾜条件的数字,除了写⼊放回数组中,还需要将该标识置为 2 ,表示接下来找的是第 2 个。说明这个元素的该位上也是1。有⼀种巧妙的思路,因为 A 和 B 的某⼀位不同才会在结果中出现 1 ,说明在那⼀位上, A 和 B 中肯定有⼀个是 0 ,有⼀个是 1。A^0 = A,任何⼀个数异或0,等于⾃身,因为所有位如果和0不同,就是1,也就是保留了⾃身的数值。
2025-11-20 09:00:00
514
原创 剑指offer-39、平衡⼆叉树
应该如何避免这种重复计算呢?平衡⼆叉树( Balanced Binary Tree ),具有以下性质:它是⼀棵空树或它的左右两个⼦树的⾼度差的绝对值不超过 1 ,并且左右两个⼦树都是⼀棵平衡⼆叉树。平衡树意味着我们需要对⽐任何在同⼀个根下的左右⼦树的⾼度差,还记得之前我们计算树的⾼度么,使⽤递归⽅式来解决,其实这道题与算⾼度差不多,只是两边⾼度需要算出⼀个差值。上⾯的计算,仔细观察就会发现会有很多重复计算的过程,⽐如下⾯的数,计算⼦树深度的时候,计算 1 的左⼦树,和计算 2 的,基本都重复了。
2025-11-19 09:00:00
339
原创 剑指offer-38、⼆叉树的深度
第⼀种⽅法⽐较容易想到,对于任意⼀个节点 node ⽽⾔,我要想知道当前 node 节点(包括当前节点)的深度,肯定得求当前节点的左边节点(设为 left )的深度 leftDeepth ,以及获取右节点(设为 right )的深度 rightDeepth ,然后求两者最⼤+1( Max{leftDeepth,rightDeepth}+1 ),就是当前节点的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的⼀条路径,最⻓路径的⻓度为树的深度。输⼊:{1,2,3,4,5,#,6,#,#,7}
2025-11-18 09:00:00
388
原创 SpringCloud 常见面试题(一)
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。
2025-11-17 09:00:00
961
原创 微服务/分布式 基础面试题
一个系统 各组件分别部署在不同服务器。彼此通过网络通信和协调的系统。可以指多个不同组件分布在网络上互相协作,比如说电商网站也可以一个组件的多个副本组成集群,互相协作如同一个组件,比如数据存储服务中为了数据不丢失而采取的多个服务备份冗余,当数据修改时也需要通信来复制数据分布式最早出现的目地首先是解决单点问题,避免单点故障,然后解决了性能问题。分布式事务是相对本地事务而言的,对于本地事务,利用数据库本身的事务机制,就可以保证事务的ACID特性。而在分布式环境下,会涉及到多个数据库。
2025-11-14 09:00:00
1311
原创 剑指offer-37、数字在升序数组中出现的次数
假设数组为 nums[] ,⼀开始的左边索引为 left = 0 ,右边界索引为 right = nums.length-1。由于数组元素都是整数,k-0.5和k+0.5正好是目标值范围的边界,它们的插入位置差值就是目标值出现次数。找到索引之后,往两边扩展,同时统计k的个数,直到元素不等于 k 的时候停⽌。分别使用二分查找找到目标值的起始和结束位置,计算区间长度,这是最优解法。一种巧妙的解法,通过查找目标值边界的插入位置来计算出现次数。输⼊:[1,2,3,3,3,3,4,5],3。
2025-11-13 09:00:00
306
原创 剑指offer-36、两个链表的第⼀个公共节点
最直接的⽅法,每⼀个链表都遍历⼀次,计算链表中的个数,⽐如 1->2->3->6->7 个数为5, 4->5->6->7 个数为4,两者相差1(设为k)个。发现了⼀个规律,也就是拼接之后的链表,是等⻓度的,第⼀个和第⼆个链表都从第⼀个开始⽐较,只要相等,就说明是第⼀个公共节点。譬如现在有⼀个链表 1->2->3->6->7 ,另外⼀个链表 4->5->6->7 ,明显可以看出第⼀个公共节点是6。第⼀种做法,直接依赖于 HashSet ,遍历第⼀个链表的时候,将所有的节点,添加到 hashset 中,
2025-11-11 09:00:00
1357
原创 MyBatis 常见面试题
虽然 MyBatis 解析 xml 映射文件是按照顺序解析的,但是,被引用的 B 标签依然可以定义在任何地方,MyBatis 都可以正确识别。原理是,MyBatis 解析 A 标签,发现 A 标签引用了 B 标签,但是 B 标签尚未解析到,尚不存在,此时,MyBatis 会将 A 标签标记为未解析状态,然后继续解析余下的标签,包含 B 标签,待所有标签解析完毕,MyBatis 会重新解析那些被标记为未解析的标签,此时再解析 A 标签时,B 标签已经存在,A 标签也就可以正常解析完成了。
2025-11-10 09:00:00
1355
原创 剑指offer-35、数组中的逆序对
我们以[8,6,4,2,7,5,3,1] ,实际上分为 [8,6,4,2] 和 [7,5,3,1] ,逆序的个数为第⼀部分 [8,6,4,2] 中的逆序个数+第⼆部分 [7,5,3,1] 中的逆序个数,还有第三部分是 [8,6,4,2] 中的元素相对 [7,5,3,1] 的逆序个数。如果第⼆个数组中的元素⼩于第⼀个数组中的元素,那么就构成了逆序对,逆序对的个数:如果中间分隔是索引是 mid ,那么构成逆序对的个数为 mid-i+1。⾸先,也就是数组中任意两个数,只要前⾯的数⼤于后⾯的数,就是逆序对。
2025-10-16 09:00:00
646
原创 剑指offer-34、第⼀次出现的字符
在⼀个字符串( 0<=字符串⻓度<=10000 ,全部由字⺟组成)中找到第⼀个只出现⼀次的字符,并返回它的位置, 如果没有则返回 -1 (需要区分⼤⼩写).(从 0 开始计数)由于全都是字符,’ A ‘-’ z ‘⼀共 58 个字符(中间有其他字符),针对已知字符范围的情况,可以用数组代替HashMap,提高效率。使用HashMap来统计每个字符的出现次数,然后按顺序查找第一个出现次数为1的字符。通过双重循环检查每个字符是否只出现一次。输⼊:“google”
2025-10-14 09:00:00
215
原创 Spring 事务、循环依赖八股文
循环依赖(Circular Dependency)是指两个或多个模块,组件之间相互依赖形成一个闭环。简而言之,模块A依赖模块B,而模块B又依赖于模块A。这会导依赖链的循环,无法确定加载或初始化的顺序。
2025-10-13 09:00:00
953
原创 Springboot 常见面试题汇总
SpringBoot是一个简化 Spring 应用程序开发的框架,它的主要目标是减少 Spring 应用程序的配置和开发复杂性,使我们能够更快地构建、测试和部署 Spring 应用。简单来说,它通过提供默认配置、自动化配置和嵌入式服务器等功能,简化了传统Spring 应用的繁琐配置过程。有人将一些依赖关系、默认配置都梳理好了,我们直接一个引用就搞定了,这就是它的本质。在开发分布式Springboot项目时, 自定义Starter是一定会用到的。
2025-10-12 20:14:35
1087
原创 Spring AOP、MVC高频面试题解析
面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。Before(前置通知):目标对象的方法调用之前触发After(后置通知):目标对象的方法调用之后触发(返回通知):目标对象的方法调用完成,在返回结果值之后触发(异常通知):目标对象的方法运行中抛出 / 触发异常后触发。AfterReturning 和 AfterThrowing 两者互斥。
2025-10-10 09:00:00
1033
原创 SpringIOC核心面试题深度解析
控制反转, 是一种设计思想,而不是一个具体的技术实现。IoC 并非 Spring 特有,在其他语言中也有应用。它是通过依赖注入(DependencyInjection)实现的。核心思想:由Spring容器管理bean的整个生命周期。通过反射实现对其他对象的控制,包括初始化、创建、销毁等,解放手动创建对象的过程,同时降低类之间的耦合度。依赖注入:通过构造器注入、setter 注入或接口注入,将对象所需的依赖传递给它,而不是让对象自行创建依赖。
2025-10-09 09:00:00
1885
原创 Java 日志管理的黄金组合: SLF4J+Logback
Logback 允许创建自定义过滤器来实现复杂的日志过滤逻辑-- 只记录ERROR级别日志 --> < filter class = " ch.qos.logback.classic.filter.LevelFilter " > < level > ERROR </ level > < onMatch > ACCEPT </ onMatch > < onMismatch > DENY </ onMismatch > </ filter > </ appender >
2025-09-26 09:00:00
723
原创 剑指offer-33、丑数
⽐如第⼆个数,第⼀次下标都在 0,我们找到 num[0] ,然后⽤2,3,5分别乘以 num[0] ,得到 2 , 3,5,发现2最⼩,那么 num[1] 就是2,这时候 num_2 这个下标就要移动到1,⽽ num_3 , num_5 不变,还是0。那么值得注意的是,如果三个数⾥⾯有两个是⼀样的,也就是可能 num[num_2]*2 刚好就等于num[num_3]*3 ,那么我们就要 num_2 , num_3 两个都下标都移动,所以不能使⽤ if-else ,⽽是都使⽤ if 判断。
2025-09-25 09:00:00
419
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅