739.接雨水
法一:单调栈
若栈口元素小于等于栈顶元素,入栈。若栈口元素大于栈顶元素,循环以下过程直到栈口元素小于栈顶元素:弹出栈顶元素记录下标为mid,选取栈口元素和新的栈顶元素的最小值(较小高度)减去中间柱子的高度,乘以栈顶元素到新的栈顶元素的宽度,就是雨水面积
法二:双指针
定义左右指针分别记录左边的最大高度和右边的最大高度,如果左边大于右边,右移左指针,取新的左指针高度和maxL的最大值,再加上maxL-height[left]的值,右指针同理
238.除自身以外数组的乘积
前缀积*后缀积:从左往右遍历,得到每个元素的前缀积,再从右往左遍历,用前缀积*后缀积
2. 两数相加
从左往后相加,用ListNode创建相加后的新结点,head指向这个结点用于最后返回结果,相加后的v%10等于该位结果,v//10等于下一位的进位
240.搜索二维矩阵
二分查找:对每一层都使用二分查找,遍历row
19.删除链表的倒数第N个结点
快慢指针:定义一个虚拟结点指向头节点,快指针指向head,慢指针指向虚拟结点,先让快指针移动n步,再让快慢指针同时移动直到快指针指向空结点,此时慢指针指向要删除元素的上一个结点,可以直接删除,最后返回的是虚拟结点的下一个结点
24.两两交换
递归:定义一个tmp结点指向要交换的第二个结点,第一个结点指向下一组交换后的第一个结点,然后第二个结点指向第一个结点,然后返回tmp
543.二叉树的直径
dfs搜索:计算直径,就是左链的长度加右链的长度再加二,递归的去计算左右链的长度,也就是每次递归都返回左右链长度的最大值加上一 。也就是在计算深度的同时计算直径,边界条件为返回-1
102.二叉树的层序遍历
bfs搜索: 循环遍历这一层的元素加入到临时数组中,将这一层元素的子孩子加入到队列中,这一层遍历结束后加入到结果数组中
108.将有序数组转换为二叉搜索树