摘要:
这段时间将会用这版面来记录一些链表的题目,脚踏实地去理解链表和使用链表。加油。(也许不是最优解,但是一定是符合题目要求的而且AC的) 1.移除链表元素 leetcode203题目:删除链表中等于给定值 val 的所有节点。 这是开始写的第一道,准备用3种方式来完成这道题目,记录自己的思路。 1.一般 阅读全文
摘要:
简单介绍 排序算法是学完数据结构后最开始接触的也是非常常用的算法。下面将常用排序算法进行介绍并代码实现以下 时间复杂度总结 先把结论摆出来吧。这样比较好记忆。 1.冒泡排序 冒泡排序是最开始学的排序算法。时间复杂度为O(n²) 步骤:依次比较前后2个数字的大小,如果前面大于后面,则交换位置。(按升序 阅读全文
摘要:
简单介绍 String是Java常见的数据类型。常说的不可变类。通过源码来看一下比较重要的方法。 类名定义 可以看到,首先final修饰了String类,表明了String类是不可被继承的。实现了CharSequence接口,也就需要实现charAt方法. final修饰的字符数组。说明了Strin 阅读全文
摘要:
剑指Offer:反转链表 由于链表具有天然的递归结构,反转链表其实很容易想到递归的方式。这里暂不说了。说一下非递归的方式 非递归的方式 由于链表的next维持关系链的关键。反转的过程就需要用额外的指针指向当前节点的前一节点和后一节点,不然的话就会发生断链了。 图示: 具体步骤伪代码可为: 1. pN 阅读全文
摘要:
剑指offer:旋转数组的最小数字 思路:由于数组是递增的。所以可以考虑2分查找。能达到O(logn)时间复杂度。 参考图示应该可以看出2个指针的变化情况。如果arr[mid]>=arr[p1],则说明p1的位置要变成mid的位置。如果arr[mid]<=arr[p2],那说明p2的位置要变成mid 阅读全文
摘要:
简单介绍: LinkedList 也是List接口的实现类。一样有序且允许重复,但是与ArrayList的结构不同。ArrayList是基于数组的结构。而ArrayList是基于双向链表的结构。链表的元素的内存空间可以不连续。在插入和删除的效率比较高,随机访问的速度比较慢。 时间复杂度: add:O 阅读全文
摘要:
单例设计模式 由于某些类创建对象可能会耗费内存和花费时间。一般将这种类设计为单例设计模式会比较好。 1.对象在内存中只有一个,减少了内存的开销 2.可以控制对象的创建时刻 单例模式的特点: 1.单例的类在整个JVM中只有一个实例 2.需要提供一个全局访问点(1.公开的静态变量,2.公开的静态方法) 阅读全文
摘要:
ArrayList是常说的动态数组。下面通过部分源码来加深对ArrayList的了解。 类名定义: 默认容量10: 常用的构造方法 添加元素:(直接添加和按下标添加) 删除元素: 按下标删除: rangeCheck判断index是否大于size 按对象删除 对象的对比是通过equals()。所以如果 阅读全文
摘要:
题目:二维数组的查找 思路: 由于二维数组是从左到右,从上到下是递增的,所以可以从右上角或者左下角开始选择, 比如从右上角开始, 右上角的值都比目标值大的话,而右上角所在列的值都比右上角的值大,则所在列排除。 右上角的值都比目标值小的话,而右上角所在行的值都比右上角的值小,则所在行排除。 以此类推, 阅读全文
摘要:
今天复习到了HashMap,感觉好多东西都忘记了。所以去把源码看了一遍,把有些东西记了下来并注释了一下。 类: 主要属性: 桶上的节点类 扩容规则: 旧容量*2。 阅读全文