剑指-24 反转链表 技术分类 思路1:通过递归到最后一个节点,然后依次修改原节点的next指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(
LeetCode-06-链表从头到尾打印链表 技术分类 public int[] reversePrint(ListNode head) { // 注意边界值,数组初始化赋值为0 if (head == null) return new int[0]; int top = -1; int[] list = ne
冒泡排序 技术分类 思路顾名思义,冒牌排序表示最大值或者最小值像是泡泡一样冒到最上面,因此每次遍历确定一个元素的最终位置,即当前范围的最大/最小值确定一个元素位置后,剩下的元素再依次根据第一点进行排序 public int[] sort(int[] arrays) { int len = arrays
线程交替打印奇数和偶数 线程交替打印1,2,3,4思路:使用锁限制奇数线程结束后必须将锁给偶数线程 // 实例锁,注意lambda表达式传递的值引用必须是不可变的,因此使用数组传递数组指针,如果是实例对象也是可以的。 final Integer[] odd = {0}; Thread t1 =
LeetCode-3-无重复字符的最长子字符串 技术分类 思路一:(该解法面对最后的大字符串[31000个字符]会超时)因为题目中要求取不存在重复字符的最大字符串,第一想法是想理解成贪心问题,总的长度为n,判断k个格子的不重复子字符串是否存在。如求取当1个字符长度的不重复字符串是否存在;2个字符长度的不重复字符串是否存在;3个字符长度的不重复字符串是否存在
LeetCode-两数相加 技术分类 解题思路:因为是相加,因此需要考虑进位运算两个数字链表的长度未必相等如果链表1的长度比链表2短,可以在链2的节点上继续循环处理进位运算/** * Definition for singly-linked list. * public class ListNode { * int val; *
剑指-30 包含min函数的栈 技术分类 解题思路:和一般栈的区别是需要记录栈存放的最小值,当栈元素更新的时候需要更新这个最小值一开始想到的是使用一个链表进行记录,但是这样的话需要将栈元素中存放的元素变为节点地址,然后维护节点的顺序(本质上可以实现,但是过于低效)2方法不可行的时候,需要注意到栈本身的特性,最后入栈的元素会先出栈,也就是说,
剑指-09 两栈实现队列 技术分类 剑指-09解题思路:栈的特性的入栈在最下面,出栈元素在最上面,因此是先入后出队列的特性是FIFO,先入先出因为给了两个栈,因此可以通过栈1入栈作为队列的入口,栈2作为队列的删除口。栈2为空的时候,将栈1的元素依次出栈并依次入栈到2,这样的话栈2最上面的元素就会是整个抽象队列最开始添加的元素。当存入的