
算法与模式学习小记
文章平均质量分 94
算法与模式学习小记
一人前行
如果你觉得迷茫,不知道自己的目标是什么,那就读书吧,把自己的工作做到极致!
展开
-
算法题记录
解释:你只能交换 s[0] = ‘a’ 和 s[1] = ‘b’ 生成 “ba”,此时 s 和 goal 不相等。解释:你可以交换 s[0] = ‘a’ 和 s[1] = ‘b’ 生成 “ba”,此时 s 和 goal 相等。解释:你可以交换 s[0] = ‘a’ 和 s[1] = ‘a’ 生成 “aa”,此时 s 和 goal 相等。步骤 2:剩下 4 个数字,所以将它们分成两个含 2 个数字的块。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。原创 2023-03-28 22:58:20 · 611 阅读 · 0 评论 -
07-数的基本概念
基本概念节点、根节点、父节点、子节点、兄弟节点一棵树可以没有任何节点,成为空数一棵树可以只有一个节点,那就是根节点子树、左子树、右子树节点的度:子树的个数数的度:所有节点度中最大的数叶子节点:度为0的节点非叶子节点:度不为0的节点节点的深度:从根节点到当前节点的唯一路径的节点总数节点的高度:当前接到到最远节点路径上的节点总数数的深度:所有节点深度的最大值数的高度:所有节点高度的最大值二叉树(binary tree)二叉树的特点:每个节点的度最大为2左子树和右子树是有顺序原创 2020-06-29 10:36:02 · 206 阅读 · 0 评论 -
06-iOS实现队列以及用Stack模拟队列
队列知识小了解队列是一种特殊的线性表,只能头尾两端进行操作。队尾:只能从队尾添加元素,一般叫做enQueue,入队。队头:只能从队头删除元素,一般叫做deQueue,出队。先进先出的原则。 队列一般可以设计的接口方法根据对象的特性,可以设计出以下的接口:元素的数量队列是否为空入队出队获取队列的头元素清空实现接口的思路,可以用数组或者双向链表都可以。一般优先使用双向链表,目前先用数组的,有时间的话,在用双向链表实现吧。代码实现如下自定义一个头文件,如下:@inter原创 2020-05-25 22:34:04 · 761 阅读 · 0 评论 -
05-iOS实现Stack以及有效的括号算法题的实现
Stack 栈的了解stack是一种线性表,只能在一端进行操作。Stack有如下特性:往栈中添加元素的操作,一般叫做push,入栈。从栈中移除元素的操作,一般叫做pop,出站。(只能移除栈顶元素)后进先出的原则。Stack 根据栈的特性,可以实现的代码因为根据栈的特性,我们可以给栈提供以下接口:元素的数量是否为空入栈出栈获取栈顶的元素代码的实现如下:创建一个YZStack的类,声明上面的接口,如下:@interface YZStack : NSObject//添加原创 2020-05-25 14:14:12 · 318 阅读 · 0 评论 -
04-用循环链表解决约瑟夫问题
什么是约瑟夫问题?例如,有8个人站成一个圈,如下图:从1开始数数,每数到3,就剔除一个人,最后会剩下谁?解决思路这个解决方法有很多,目前采用的采用的是循环链表的方法。也就说,链表每走两步,就删除一个节点。代码实现:创建链表的.h文件@interface ListNode : NSObject@property (nonatomic, assign) int value;@property (nonatomic, strong) ListNode *next;+ (instance原创 2020-05-21 21:53:43 · 428 阅读 · 0 评论 -
03-虚拟头结点、数组的缩容、复杂度震荡
虚拟头结点在链表的实现过程中,添加或者删除等操作时,总是需要对第一个数据做额外的判断,以避免报错。但是这样的话,会增加代码量。引入虚拟头结点的话,如下图所示:虽然这样可以减少代码量,但是并不建议这么做。但是需要了解有这个一个功能。数组的缩容如果内存比较紧张的情况下,可以对数组进行缩容操作。例如,一个数组有100的容量,但是只使用了10个空间,那么就可以重新申请一块新的空间,让数据放到新的空间中。比如,在删除操作时,可以判断,如果剩余空间占总空间一半的时候,就可以对数组进行缩容的.原创 2020-05-13 22:35:59 · 170 阅读 · 0 评论 -
02-判断一个链表是否是环形链表:用快慢指针来实现
题目思路:用快慢指针的思想:快指针走两步,慢指针只走一步。如果这个链表是一个环,那么快指针和慢指针总会相遇的。-快慢指针的原理:假设快慢指针之间相差n步,慢指针先走一步,那么快慢指针相差n+1步然后快指针走两步,那么快慢指针相差n+1-2 = n-1步;也就是说,每走一次,快慢指针的距离就减少一次;那么走到n次的时候,快慢指针的相差就为0.ios代码实现(1) 创建一个链表的类,如下:@interface Node : NSObject@property (.原创 2020-05-11 22:45:16 · 158 阅读 · 0 评论 -
01-时间复杂度与斐波那契数
1.时间复杂度1.1 什么是时间复杂度时间复杂度是指执行算法所需要的计算工作量。也就是说,执行一段代码时,每行代码要执行次数的总和。1.2 大O表示法大O表示法其实就是对时间复杂度的一个粗略估算,可以让开发者快速了解一段代码的执行效率。毕竟如果把每一段代码的时间复杂度都计算出来有点麻烦,另外对于常数来说影响不大。因此,在引入大O表示法时,就是把常数忽略。1.3 时间复杂度计算的案例案...原创 2020-05-01 11:54:16 · 225 阅读 · 0 评论 -
LeetCode学习_day1:原地算法
原地算法:是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部份覆盖掉。范例:冒泡排序、选择排序、插入排序、希尔排序(1)冒泡排序:冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上...原创 2018-08-19 23:18:00 · 378 阅读 · 0 评论 -
六大设计原则
1.单一指责原则(Single Responsibility Principle)单一职责原则主要是指 类的职责要单一,不能将太多的职责放在一个类中(高内聚、低耦合)。简单来说就是不同的功能封装在不同的类中,使用的时候提供接口就可以了。定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中,即又定义有且仅有一个原因使类变更。由来:类A负责两个职责:职责P1,职责P...原创 2019-12-06 18:49:00 · 152 阅读 · 0 评论 -
适配器模式(转)
(-) 提出问题朋友们在开发中有没有遇到过这种情况:开发中写了一个视图控件,虽然这个控件只是一个展示类的,并没有什么交互。但是在项目好几个地方都用到了这个控件了,你在给这个视图控件负值的时候是怎么做的呢?是不是这么写的呢?-(void)laodData:(ItemModel*)model ;这么写没有错,而且感觉很简单。但是有两点不好:1.视图根数据模型有耦合,视图类引入了模...转载 2019-12-09 12:12:27 · 111 阅读 · 0 评论 -
算法学习
1.逆波兰算法题目:求["2", "1", "+", "3", "*"];前置知识:(1)在求解逆波兰算法前,需要先了解四则运算的表达式,四则运算的表达式分3中:前缀表达式(又称波兰表达式)、中缀表达式、后缀表达(又称逆波兰表达式);以上三种表达式是等价的。(2)栈:栈是先入后出的,所以,这里可以借用栈的思路来解题。解题思路:(1)遍历数组;(2)遇到数...原创 2019-12-09 17:06:47 · 180 阅读 · 0 评论