时间复杂度:O(N) : 其中 N 为树的节点数量。初始化 HashMap 需遍历 in ,占用 O(N) 。递归共建立 N 个节点,每层递归中的节点建立、搜索操作占用 O(1) ,因此使用 O(N) 时间。
空间复杂度:O(N) : HashMap 使用 O(N) 额外空间。最差情况下,树退化为链表,递归深度达到 N ,占用 O(N) 额外空间;最好情况下,树为满二叉树,递归深度为 logN ,占用 O(logN) 额外空间。
importjava.util.Map;importjava.util.HashMap;publicclassSolution{privateMap<Integer,Integer> map;publicTreeNodereConstructBinaryTree(int[] pre,int[] in){this.map =newHashMap<>();for(int i =0; i < in.length; i++){
map.put(in[i], i);}returnbuildTreeMethod(pre,0,pre.length-1,
in,0,in.length-1);}publicTreeNodebuildTreeMethod(int[] pre,int startPre,int endPre,int[] in,int startIn,int endIn ){if(startPre>endPre||startIn>endIn){returnnull;}int index = map.get(pre[startPre]);TreeNode root =newTreeNode(pre[startPre]);int leftSize = index - startIn;TreeNode left =buildTreeMethod(pre,startPre+1,startPre+leftSize,
in, startIn,index-1);
root.left = left;TreeNode right =buildTreeMethod(pre,startPre+leftSize+1,endPre,
in,index+1,endIn );
root.right = right;return root;}}
斐波那契数列
时间复杂度:O(n)
空间复杂度:O(1)publicclassSolution{publicintFibonacci(int n){//f(n) = f(n-1)+f(n-2)int a =0;int b =1;int res =0;for(int i=1;i<=n;i++){
res = a+b;
b = a;
a = res;}return res;}}
青蛙跳台阶(与斐波那契一致)
publicclassSolution{publicintjumpFloor(int target){int a =1, b =1, sum;for(int i =0; i < target; i++){
sum =(a + b)%1000000007;
a = b;
b = sum;}return a;}}
day1牛客 JZ1(LeetCode 04) 二维数组中的查找时间复杂度:O(m+n);空间复杂度:O(1)public class Solution { public boolean Find(int target, int [][] array) { int startR = array.length-1; int startC = 0; while(startR>=0&&startC<=array[0].le