面试
飞奔的六六
这个作者很懒,什么都没留下…
展开
-
【Go】操作手册
mainmain包具有特殊含义,Go编译器识别main包,并执行底下的main函数,将其编译为二进制可执行文件。main作为主函数,每个代码文件中的init函数都会在main函数执行前调用。importimport ( "fmt" "log" _ "github.com/goinaction/code/chapter2/sample/matchers" "github.com/goinaction/code/chapter2/sample/search"原创 2020-07-31 21:10:22 · 543 阅读 · 0 评论 -
面试准备汇总
数据结构 & 算法数组数组中重复的数字 旋转数组的最小数字 二维数组的查找链表从尾到头打印链表字符串树重建二叉树 & 二叉树的下一个节点 不同的二叉搜索树 ||栈和队列用两个栈实现队列 & 用两个队列实现栈贪心分治数组中重复的数字动态规划回溯其他 青蛙跳台阶(斐波那契数列) ...原创 2020-07-28 22:23:47 · 450 阅读 · 0 评论 -
【面试题】替换空格
题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."解法:分配额外的空间,将原字符串拷贝过去,遇到空格则替换,这样的时间复杂度为.public String replaceSpace(String s) { StringBuffer sb = new StringBuffer(); char[] chars = s.toCharArray()...原创 2020-07-26 17:39:04 · 414 阅读 · 0 评论 -
【面试题】二维数组中的查找
题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]解法:从矩阵的...原创 2020-07-26 17:31:15 · 363 阅读 · 0 评论 -
【leetcode 95】不同的二叉搜索树 ||
题目:给定一个整数 n,生成所有由 1 ...n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ ...原创 2020-07-26 00:58:30 · 334 阅读 · 0 评论 -
【面试题】旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。解法:顺序查找即可,时间复杂度为 利用二分查找的思想,大部分情况旋转后数组最小值左边数值为最大,利用前后指针的方法找到最小值,此部分时间复杂度为;当数组旋转左侧的0个数或者数组中有相同元素时,退化为第1种解法。public static int min(int[.原创 2020-07-24 16:03:56 · 312 阅读 · 0 评论 -
【面试题】青蛙跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法很明显,这是一个斐波那契数列,可表示为:可以用递归和迭代两种解法。其中,递归解法效率非常低下,有大量重复计算,随着N的增长时间复杂度呈指数增长,为。而迭代的解法采取自底向上的思路,逐个计算,每个f值只需计算一次,时间复杂度为,大大提高了运算速度。// 解法一:递归public long Fibonacci(int n) { if (n <= 0) return 0; if (n.原创 2020-07-24 11:22:40 · 235 阅读 · 0 评论 -
【面试题】用两个栈实现队列 & 用两个队列实现栈
题目一:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入节点和在队列头部删除节点的功能。public static class SQueue<T> { private Stack<T> stack1 = new Stack<T>(); private Stack<T> stack2 = new Stack<T>(); void a.原创 2020-07-24 10:48:30 · 288 阅读 · 0 评论 -
【面试题】重建二叉树 & 二叉树的下一个节点
题目一:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回它的头节点。节点定义如下:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; }} ..原创 2020-07-24 10:02:33 · 219 阅读 · 0 评论 -
【面试题】从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值,链表节点定义如下:public classListNode {int val;ListNode* next;ListNode(int x) { this.val = x; this.next = null; }}解法:迭代——使用栈保存每个结点的数据,遍历结束后逐个输出栈值; 递归——递归输出当前结点后面的结点// 解法一public voi...原创 2020-07-24 00:23:19 · 236 阅读 · 1 评论 -
【面试题】数组中重复的数字
题目一:在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7,的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数组2或者3。解法:将输入数组排序,时间复杂度为;扫描排序后数组,总的时间复杂度为,空间复杂度为; 由于数组长度为n,且所有数字都在范围内,因此可以额外设置一个长度为n的数组作为哈希表,下标对应原数组内数字,扫描一遍数组即可得到结果,代价.原创 2020-07-23 17:07:50 · 290 阅读 · 0 评论 -
【设计模式】单例模式的5种不同写法
// 1. 在类初始化时加载,因此加载速度较慢,但调用效率高,且线程安全(四星推荐)public class Singleton1 { private static Singleton1 instance = new Singleton1(); Singleton1() {} public static Singleton1 getInstance() { return instance; }}// 2. 适用于单线程场景,线程不安全,第一次调用效率较慢,加载速度较1有提升(.原创 2020-07-23 12:03:38 · 200 阅读 · 0 评论