面试算法
普普通通程序猿
做人要知足,做事要知不足,做学问要不知足。
展开
-
面试算法-二叉树中找到两个节点的最近公共祖先(JAVA实现)
题干给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。数据范围:1≤n≤1000,树上每个节点的val满足 0<val≤100要求:空间复杂度 O(1),时间复杂度 O(n)注:本题保证二叉树中每个节点的val值均不相同。解题思路一般情况下,对于二叉树的算法题大多可以通过递归的方法来解决。那这道题目如何来递归呢?利用子问题的解来求得最终解。根节点判断最近公共祖先的三种情况:最近公共祖先的解在左子树上最近公共祖先原创 2021-10-11 23:51:52 · 542 阅读 · 0 评论 -
面试算法-最长无重复子数组(JAVA实现)
题干描述给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组数据范围:数组长度[0,1000000],数据元素[0,100000]要求:空间复杂度O(n) ,时间复杂度O(nlogn)。示例1:输入:[2,3,4,5]返回值:4说明:[2,3,4,5]是最长子数组 示例2:输入:[2,2,3,4,3]返回值:3说明:原创 2021-10-03 00:41:30 · 587 阅读 · 0 评论 -
面试算法-青蛙跳台阶问题(JAVA实现)
题干一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。数据范围:0<= n <=40要求:时间复杂度:O(n) ,空间复杂度O(1)。解题思路首先,这是一道经典的DP(动态规划)问题,动态规划是通过组合子问题的解而解决整个问题的。动态规划通常应用于最优化问题。其解法类似于我们在数学中学过的归纳法:1. 描述最优解的结构2. 递归定义最优解的值3. 按自底向上的方式计算最优解的值- 摘自《算法导论》OK,理原创 2021-09-24 00:41:03 · 1632 阅读 · 0 评论 -
面试算法-二叉树层序遍历(java实现)
题干给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]示例1输入:{1,2}返回值:[[1],[2]]示例2输入:{1,2,3,4,#,#,5}返回值:[[1],[2,3],[4,5]]解题思路首先判断属于广度遍历,基于广度遍历用队列,深度遍历用堆栈的套路,大概确定整体数据结构使用队列方式实现;难点在于需要层级原创 2021-09-11 16:11:36 · 303 阅读 · 0 评论 -
面试算法-双栈变队列(JAVA实现)
题干用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:[“PSH1”,“PSH2”,“POP”,“POP”]返回:1,2解析:“PSH1”:代表将1插入队列尾部“PSH2”:代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=>返回1"POP“:代表删除一个元素,先进先出=>返回2解题思路栈的特点是先进后出,类似于一个瓶子,而原创 2021-09-06 00:53:15 · 124 阅读 · 0 评论 -
面试算法-链表是否有环(JAVA实现)
题干判断给定的链表中是否有环。如果有环则返回true,否则返回false。要求:空间复杂度为O(1).解题思路打个比方,博尔特在前面跑,你在后面追,什么情况下你能追上他?答案是什么情况下都追不上,但如果在操场跑圈,在他套你圈的时候你俩是会有短暂的并驾齐驱的机会滴。。这道题的思路其实也是这样,放两个快慢指针,一起沿着链表往下走,如果快指针又和慢指针出现在同一位置了,自然就是有环的情况,否则无欢。掌握了思路,再解这道算法题就比较简单了,注意一些边界判断,小心出现空指针异常的问题就行了~~示例代码p原创 2021-09-03 00:38:25 · 91 阅读 · 0 评论 -
面试算法-螺旋数组查找值(JAVA实现)
题干: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例:eg1: 输入: nums = [4,5,6,7,0,1,2], target = 0 输出: 4eg2: 输入: nums =[4,5,6,7,0,1,2], tar原创 2021-08-24 00:57:04 · 207 阅读 · 0 评论