~~收集的面经~~html
1. 实现hashtable的put 和get操做node
参考:https://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/git
put:github
get:spa
2. 给定一个8*8的棋盘,一个起始位置si,sj, 一个终止位置ei,ej,求问马从起始位置到终止位置最少须要多少步。.net
附:八皇后问题rest
https://blog.csdn.net/friendbkf/article/details/49892039code
https://www.cnblogs.com/xinghuan/p/6061824.htmlhtm
3. 给定一棵二叉树,求这颗二叉树最大子路径和,包括横跨根结点的路径blog
https://blog.csdn.net/feeltouch/article/details/78511214
public class Solution { private int max = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { helper(root); return max; } public int helper(TreeNode root) { if(root == null) return 0; int left = helper(root.left); int right = helper(root.right); //链接父节点的最大路径是1、2、四这三种状况的最大值 int currSum = Math.max(Math.max(left + root.val, right + root.val), root.val); //当前节点的最大路径是1、2、3、四这四种状况的最大值 int currMax = Math.max(currSum, left + right + root.val); //用当前最大来更新全局最大 max = Math.max(currMax, max); return currSum; } }
4. 每k个反转单链表。
https://blog.csdn.net/beiyetengqing/article/details/7596707
public static Node reverse (Node head, int k) { Node current = head; Node next = null; Node prev = null; int count = 0; /*reverse first k nodes of the linked list */ while (current != null && count < k) { next = current.next; current.next = prev; prev = current; current = next; count++; } /* next is now a pointer to (k+1)th node Recursively call for the list starting from current. And make rest of the list as next of first node */ if(next != null) { head.next = reverse(next, k); } /* prev is new head of the input list */ return prev; }
Struct btree{ Int value; Btree*l; Btree*r; } int maxn=-1; int find_max(Btree*root){ if(!root) return 0; int l = find_max(root->l) int r = find_max(root->r) int m = max(i,j)+root->value; int m2 if(m>maxn) maxn=m; return m; }