自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 力扣面试经典150题-122. 买卖股票的最佳时机 II

解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。输入:prices = [7,1,5,3,6,4]返回 你能获得的 最大 利润。

2026-08-24 16:28:09 489

原创 力扣面试经典150题-121. 买卖股票的最佳时机

解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;解释:在这种情况下, 没有交易完成, 所以最大利润为 0。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]

2026-08-24 15:53:40 459

原创 力扣面试经典150题-169. 多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。(可以分为两种情况:若第一个为多数元素,若第一个不为多数元素,但count最后一次变为0一定是因为多数元素的出现)题目意思应该是找出传入数组的多数元素(一个)(因为返回的是一个int类型,且题目要求返回传入数组中的多数元素)先排序,因为多数元素个数大于总个数/2,因此,多数元素一定占了最中间位置。由于多数元素出现次数超过一半,最终留下的候选必定是多数元素。输入:nums = [2,2,1,1,1,2,2]输入:nums = [3,2,3]

2026-08-22 19:44:35 273

原创 力扣面试经典150题-80. 删除有序数组中的重复项 II

这种解法虽然时间复杂度符合要求但明显不优雅,需要额外加一个计数器增加维护负担,而且第二个if语句会出现nums[1]=nums[1]这样无意义的赋值(但不能不写nums[slow] = nums[fast],例子:[0,0,1,1,1,1,2,3,3],如果不写题目会输出[0,0,1,1,2,3,2])解释:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。输入:nums = [0,0,1,1,1,1,2,3,3]此题基于我的另一篇文章。

2026-08-21 00:09:48 473 1

原创 力扣面试经典150题-26. 删除有序数组中的重复项

fast指针在前面探路,当nums[fast] > nums[slow]时(fast指针所指值只可能大于或等于slow指针所指值),因为。

2026-08-21 00:09:10 260 1

原创 力扣面试经典150题-27. 移除元素

本文介绍了两种原地移除数组中指定值元素的解法。解法一使用对撞指针,通过交换左右指针元素来保证前k个位置不为目标值,时间复杂度O(n)。解法二采用快慢指针,快指针遍历数组,慢指针记录非目标值的位置,同样实现O(n)时间复杂度。两种方法均满足题目要求:修改数组使前k个元素不含目标值,并返回k值。代码实现简洁高效,适用于类似LeetCode 27题的场景。

2026-08-20 16:11:28 328 2

原创 力扣面试经典150题-88. 合并两个有序数组

摘要: 本文探讨了合并两个有序数组的算法问题,要求将非递减排列的nums2合并到nums1中,并保持有序。初始思路是将nums2直接拼接到nums1末尾后排序,但时间复杂度较高(O((m+n)log(m+n)))。优化方案采用逆向双指针法:从两个数组末尾开始比较,将较大元素填入nums1的尾部,避免数据移动,确保时间复杂度为O(m+n)。最终处理剩余元素,若nums2未遍历完则直接按序填充。此方法高效且节省空间,通过示例验证了其正确性。

2026-08-20 11:21:04 382 2

原创 力扣算法题-面试题 17.04. 消失的数字

摘要:本文探讨了在包含0到n所有整数但缺失一个的数组中寻找缺失整数的问题。作者首先尝试排序后比较索引与元素值的方法,但时间复杂度较高。随后提出利用辅助数组的优化方案,通过映射元素值到数组索引来定位缺失值,解决了索引越界和初始化干扰问题,最终实现了O(n)时间复杂度的解法。该方案通过示例验证了正确性和高效性。

2026-08-19 14:25:02 447

原创 观察者模式(发布-订阅模式)

以上就是本期要讲的内容,本文介绍了观察者模式,其他常见设计模式在本系列其他文章,有兴趣可了解。

2026-08-18 01:06:02 350

原创 行为型模式-策略模式

策略模式是一种行为设计模式,通过定义一组可互换的算法(如驾车、公交、步行等路线规划策略),并将其封装在独立的类中实现解耦。核心包含策略接口、具体策略类和环境类(如导航应用GaoDe),环境类通过维护策略引用并委托执行,使客户端能动态切换算法(如选择出行方式)。该模式提升了代码灵活性和扩展性,符合开闭原则。示例展示了不同导航策略的Java实现及调用过程。

2026-08-17 10:59:49 377

原创 行为型设计模式-模板方法

模板方法设计模式通过将算法的固定骨架封装在抽象父类中,将可变步骤延迟到子类实现,达到代码复用和扩展的目的。主要包含抽象类、具体子类、模板方法、抽象方法、具体方法和钩子方法等角色。钩子方法分为两种:条件钩子(返回布尔值控制流程)和扩展钩子(空实现供子类插入代码)。以冲泡饮料为例,父类定义制作流程(烧水、冲泡、倒杯等固定步骤),子类实现个性化步骤(如咖啡加糖、茶加柠檬),并通过钩子方法控制是否添加调料。该模式既保证了算法结构稳定,又允许子类灵活扩展特定步骤。

2026-08-17 10:08:21 442

原创 适配器模式

适配器模式通过转换接口解决不兼容问题,分为类适配器和对象适配器两种实现方式。类适配器通过继承适配者类实现目标接口(如USB转Type-C充电),但耦合度高;对象适配器则通过组合方式持有适配者引用,灵活性更好。两者都能将已有功能适配到目标接口,但对象适配器更推荐使用,因其降低了类间耦合度,符合组合优于继承的原则。示例展示了如何将Type-C充电功能适配为USB接口,客户端只需调用目标接口方法即可完成适配。

2026-08-15 20:01:25 343

原创 结构型模式-代理模式

摘要 本文详细介绍了Java中的代理模式,包括静态代理和动态代理两种实现方式。静态代理通过中介类增强目标类功能,需要手动编写代理类;动态代理分为JDK动态代理和CGLIB代理,前者基于接口实现,后者通过继承目标类实现。JDK动态代理利用反射机制在运行时生成代理类,而CGLIB代理通过字节码技术生成目标类的子类作为代理。两种动态代理方式都通过工厂模式封装代理对象的创建过程,提供了更灵活的代理方案。文章还特别说明了CGLIB代理在JDK17环境下的依赖调整方法。

2026-08-14 15:09:07 506

原创 建造者模式

本文介绍了建造者模式的实现原理与具体应用。建造者模式包含四个核心角色:产品(Product)、抽象建造者(Builder)、具体建造者(ConcreteBuilder)和指挥者(Director)。通过自行车生产案例展示了该模式的实现过程:先定义Bike产品类,再由抽象建造者Builder声明构建方法,具体建造者BnlBikeBuilder实现具体构建逻辑,最后由Director控制构建流程。运行结果验证了该模式能有效分离对象的构建与表示,支持灵活配置产品属性。该模式适用于创建复杂对象的场景,与其他设计模式

2026-08-13 17:21:25 467

原创 简单工厂模式,工厂方法模式,抽象工厂模式

设计模式:创建型模式概述 本文介绍了三种常见的创建型设计模式: 简单工厂模式:一种编程习惯,通过工厂类集中创建对象,实现使用与创建的解耦。虽然简化了代码,但工厂与产品耦合度高,新增产品需修改工厂代码,违反开闭原则。 工厂方法模式:定义工厂接口,将实例化延迟到子类工厂。每新增产品只需添加对应的工厂类,完全遵循开闭原则,但会增加系统复杂度。 抽象工厂模式:适用于生产多个相关产品族(如不同品牌的快餐组合)。可创建属于同一产品族的不同等级产品,比工厂方法模式更灵活,能处理更复杂的对象创建需求。 三种模式各有适用场景

2026-08-13 14:53:52 355 1

原创 创建型模式-单例模式

单例模式是一种创建型设计模式,确保类只有一个实例并提供全局访问点。分为饿汉式(类加载时创建)和懒汉式(首次使用时创建)。饿汉式通过静态变量或静态代码块实现,可能造成内存浪费;懒汉式存在线程安全问题,可通过加锁或双重检查锁解决,后者需配合volatile防止指令重排序。静态内部类方式利用JVM类加载机制保证线程安全和延迟加载。枚举方式是最推荐的实现,天然线程安全且防反射破坏。单例模式可能被序列化和反射破坏,需额外处理。

2026-08-12 15:32:05 475 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除