面试算法:加油站难题,加油的学问还真不少
题目
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
如果题目有解,该答案即为唯一答案。
...
2020-01-23 02:09:32 |
Data-Struct
面试算法:动态规划解三角形最短路径详解
题目
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
示例 1:
输入:triangle = [[2],[3,4],[6,5...
2020-01-23 02:09:32 |
Data-Struct
面试算法:填充每个节点的下一个右侧节点指针汇总
填充每个节点的下一个右侧节点指针
题目
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。
二叉树定义如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指...
2020-01-23 02:09:32 |
Data-Struct
面试算法:二叉树展开为链表
二叉树展开为链表
题目
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例 1:
输入:root = [1,2,5,3,4,null,6]
输出:...
2020-01-23 02:09:32 |
Data-Struct
面试算法:二叉树路径之和问题汇总
所有的路径
题目
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/
2 3
5
输出: [“1->2->5”, “1->3”]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
思路
最直观的方法是使用深度优先搜索。
在深度优先...
2020-01-23 02:09:32 |
Data-Struct
面试算法:如何根据前序与中序遍历序列构造二叉树?
从前序与中序遍历序列构造二叉树
题目
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
解题思路
如何确定根节...
2020-01-23 02:09:32 |
Data-Struct
面试算法:二叉树的前序/中序/后序/层序遍历方式汇总 preorder/Inorder/postorder/levelorder
要求
本文用于整理二叉树的 4 种遍历方式:前序遍历、中序遍历、后序遍历、层序遍历。
并且使用递归和非递归两种方式。
统一节点定义
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode() {}
...
2020-01-23 02:09:32 |
Data-Struct
面试算法:二叉树的前序/中序/后序非递归遍历图解
要求
本文用于整理二叉树的 3 种常见遍历方式:前序遍历、中序遍历、后序遍历。
本文主要详细讲解非递归的方式,并结合图进行详细讲解。
希望每一位小伙伴可以真正的理解二叉树的遍历流程,让我们开始吧!
准备工作
本文主要是为了重新梳理二叉树的非递归遍历,所以基本的遍历可以参考下面的文章:
面试算法:二叉树的前序/中序/后序/层序遍历方式汇总
节点定义
public class T...
2020-01-23 02:09:32 |
Data-Struct