- 博客(10)
- 收藏
- 关注
原创 leetcode 141 Linked List Cycle
今天写must to do list的第六题,linked list cycle。就是判断链表是否有环,这个其实思路蛮简单的,可以去遍历这样两层遍历肯定能判断出来是否有环,但是这样穷举的话其实时间复杂度有点高O(n²)。所以考虑使用双指针的快慢指针。原因是如果链表有环,那么快指针每次走两步 慢指针每次走一步,一定会相遇。还是老样子,边界值。首先如果头结点就是空的那么肯定不会有环路。其次判断条件,这个条件应该是fast为null并且fast的next为null。
2023-06-06 23:37:14 83
原创 leetcode53 Maximum Subarray
其实这个主要步骤就是找最大,从左向右,从右向左都一样。如果和大于其他和,那么这个和就是最大的,如果和小于值,那这个值或许就是最大的,极端点的例子[-1,-2,-3,-4,1,-3,-2]。在leetcode看到一个不用对比nums[i]和sum的,直接在max赋值之后sum如果小于0归0,也很巧妙,如果这个元素之前的总和为0,那么完全可以由他算起,就算全部都是负数,最大的负数也已经存在于max这个赋值中。其实应该可以写成Math.max(max, Math.max(sum,nums[i]))
2023-06-04 00:16:35 77 1
原创 leetcode21 Merge Two Sorted Lists
在这个题里面其实很好找,就是list1 或/并 list2为空的时候,如果list1 或/并 为空的时候,我们也不需要遍历或者递归了,直接返回就行了,list1递归完了 返回list2, list2递归结束返回list1, 因为另一方可能还有值,但是这些值不需要关心了,直接返回就可以了,就是归就可以了。还有一个方法是建立虚拟的头节点,这个很好理解,就是建立一个虚拟头节点,然后对比list1 list2的结点,按照从小到大接到虚拟头结点后面,最后返回虚拟头结点的next。easy list 第三题。
2023-06-04 00:00:00 84 1
原创 leetcode20 Valid Parentheses
但是这个代码在测试用例([])失败了,看起来必须是“严格”匹配也就是只能是()[]这样,所以还是用栈这个数据结构最合适。然后使用栈可以写出如下。easy list的第二题是括号验证,最开始我想到的是计数法,比如左括号右括号,然后左右相加模2为0,这样就可以判断出来括号是否匹配了。这个其实也不难,因为严格匹配所以限定的很死,不过最后一个else需要注意,我刚开始没写然后会有一些错误比如([{)这种其实也能通过。这个逻辑很简单,代码如下。
2023-06-03 22:16:50 79 1
原创 数据结构(线性表)
有限,元素一定要是有限的嘛,百个千个也是有限的,同时计算机内存肯定也是有限的嘛。总结:线性表比较好理解,优缺点明显,查找是它的优势,还有个潜在的优势在于不用存储寻址操作(元素逻辑关系)。当然衍生的属性和操作可能接触的更多,比如属性中用到的长度(length), 这个大概就是有效数据元素的个数。线性结构,其实我在大学接触线性结构之前就接触了数组,数组是线性结构的一种体现方式,顺序结构嘛。线性就是简单指向下一个邻居,在寄存器下一个地址,这个可以是相邻的(顺序)可以是指定的(链式)。线性表的属性:数据元素。
2023-05-29 11:46:36 79
原创 数据结构(概念)
首先物理结构,计算机物理结构两种,线性结构(顺序存储)和链式结构(跳跃存储),这个没什么说的,据我所知计算机的确只有这两种存储结构。大概是这些,在这些基础上有很多衍生的非常好用的数据结构,再逐个去看和理解,同时避免刷算法的时候盲目去刷,大概是刷算法先看看要求然后想想用哪个数据结构(大部分)。数据对象约等于数据的抽象化(同类项合并集合),比如每个人是一个集合,那这个人就是一个数据/数据对象,都有相同的构成(站立动物)和相同的操作(走跑跳)。这个概念其实没有那么清晰的分类,比较抽象,理解的并不到位可能。
2023-05-29 10:54:36 48 1
原创 建造者(builder)模式
上一次说到工厂模式是因为在java多态中避免违背单一职责和开闭原则产生的设计模式。今天的这个建造者模式同样作为创造性(creational patterns) 的设计模式, 当我们的系统足够复杂的时候,我们类会变多,同时类所承担的功能也在增多。基于此我们可能会碰到一个复杂的类去实例化成为有不同结构或者内部状态的实例对象,我们可以独立的类去概括这个实例逻辑。这些类被称为”建造者(builder)。 当然定义还是挺绕口的,我们上图: 建造者模式仍然遵从单一职责和开闭原则,我们把复杂对象实例化的逻辑放在.
2021-07-19 17:45:26 184
翻译 工厂模式的一些思考
面试中经常被问到设计模式,既然昨天写了被详细问到的单例模式,不妨每天深入学习一个设计模式。总体感觉设计模式学起来很抽象,需要去思考一些问题,尤其是在日常撸代码和工作中可能会突然感悟到。 我查看了很多博客发现大家都把工厂模式具象化讲的很好,例如:工厂模式和单例模式都隶属于创造模式(Creational Pattern),然后举不同的例子便于大家理解。这里就不班门弄斧了。这篇文章有点像翻译,可能更“学术”一点去分析工厂模式。这篇博客基于《Design Patterns and best practice in
2021-07-17 17:45:03 195
原创 设计模式-单例模式
前天去面试,被问到单例模式,面试官问的很详细,所以在这里写一写对单例模式的总结和看法。 单例模式作为大部分人第一个知道的设计模式广为人知,即在一个系统中有唯一存在的实例。 这样做的好处:1,确保全局唯一单例可以减少系统开销,比如系统中有较大的占用的时候,可以在启动阶段生成一个实例。例如windows系统中的任务管理器,一般来说并不能打开多个。2,在共享资源的访问或者使用,可以节省开销。比如日志文件,应用的配置等。3,由于存在唯一实例,访问对象的速度加快,比如线程池,数据库连接池。 下面针对面试官的提问
2021-07-16 17:50:19 172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人