算法面试题
文章平均质量分 80
惊鸿一博
毕业于中国科学院大学/中科院自动化研究所;专注于SLAM,三维重建,图像处理,视觉定位等;曾就职于鸿海集团,大陆集团,现在某自动驾驶独角兽企业;热爱分享,热爱生活;欢迎一起交流,学习,进步。
展开
-
算法笔记_面试题_22. 图与搜索(BFS/DFS)相关_模板及示例十几道
1. 图相关(Graph)例1. 克隆无向图描述:克隆一张无向图. 无向图的每个节点包含一个 label 和一个列表 neighbors. 保证每个节点的 label 互不相同.你的程序需要返回一个经过深度拷贝的新图. 新图和原图具有同样的结构,并且对新图的任何改动不会对原图造成任何影响.你需要返回与给定节点具有相同 label 的那个节点.关于无向图的表示: http://www.lintcode.com/help/graph/示例: 输入:adjList = [[2,4],[1,3],[..原创 2021-12-23 19:35:01 · 1391 阅读 · 0 评论 -
算法笔记_面试题_21.数据结构相关_模板及示例十几道
1. 栈相关(stack)例1. 最小栈(Min Stack)描述:实现一个栈, 支持以下操作:push(val) 将 val 压入栈;pop() 将栈顶元素弹出, 并返回这个弹出的元素;min() 返回栈中元素的最小值;要求 O(1) 开销;保证栈中没有数字时不会调用 min(). (来源 :lintcode 12 · 带最小值操作的栈= leetcode 剑指 Offer 30. 包含min函数的栈= leetcode 155. 最小栈)样例输入:push(1) min() push(...原创 2021-12-15 10:26:34 · 2272 阅读 · 0 评论 -
算法笔记_面试题_20.数组相关_模板及示例十几道
1. 排序数组的相关操作例1. 合并两个排序数组描述:将按升序排序的整数数组A和B合并,新数组也需有序。来源:(lintcode 6 · 合并排序数组简单)样例 1:输入:A = [1] B = [1]输出:[1,1]解释:返回合并后的数组。样例 2:输入:A = [1,2,3,4] B = [2,4,5,6]输出:[1,2,2,3,4,4,5,6] 代码有点类似 合并两个排序链表。只不过这里使用时vector相关的操作。class Solution ...原创 2021-11-30 11:44:09 · 604 阅读 · 0 评论 -
算法笔记_面试题_19.链表_模板及示例十几道
1. 删除链表中所有重复节点描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3] 输出:[2,3]代码因为删除的是所有重复的节点,只要重复全都删除。所有链表的头可能会发生变化。所以为了方便起见,我们...原创 2021-11-24 18:48:15 · 800 阅读 · 0 评论 -
算法笔记_面试题_18.动态规划_模板及示例十几道(下)
接文章 算法笔记_面试题_18.动态规划_模板及示例十几道1. 背包问题例14.class Solution {public: /** * @param m: An integer m denotes the size of a backpack * @param A: Given n items with size A[i] * @param V: Given n items with value V[i] * @return: The.原创 2021-11-20 22:49:16 · 570 阅读 · 0 评论 -
算法笔记_面试题_18.动态规划_模板及示例十几道(上)
目录1. 引例例1.数字三角形最小路径和代码1_ traverse法代码2_ 分治法DC代码3_动态规划DP_记忆化搜索(分治法DC + 记忆化)代码4_动态规划DP_多重循环(本文重点,重点记忆)动态规划方法对比:记忆化搜索 对比 多重循环2. 动态规划的套路2.1 动态规划的四点要素2.2什么情况下使用动态规划?2.3什么情况下不使用动态规划?2.4面试中常见的动态规划类型参考:九章算法 lintocde leetcode 代码随想录carl...原创 2021-11-13 20:34:48 · 644 阅读 · 0 评论 -
深度学习_算法工程师 6 万字总结算法面试中的深度学习基础问题
前言真的是千呼万唤始出来emmmm,去年春招结束写了篇面试的经验分享。在文中提到和小伙伴整理了算法岗面试时遇到的常见知识点及回答,本想着授人以渔,但没想到大家都看上了我家的 !但因本人执行力不足,被大家催到现在才终于想着行动起来分享给大家,笔者在这里给各位读者一个大大的抱歉,求原谅呜呜~~相信今年参加秋招的小伙伴们一定都拿到理想的offer啦,明年准备找工作的小盆友如果觉得本文还有些用可以收藏哈。由于篇幅限制,就先发出前半部分,后面等下回笔者得空哈~另外欢迎小伙伴们转发!转发!再转发呀!!第一章转载 2021-11-10 10:37:01 · 1073 阅读 · 0 评论 -
算法笔记_面试题_17.二分法搜索_模板及示例十几道
0. 二分法搜索简介及模板参考:九章算法通常什么时候会用到二分法?当一个搜索问题可以使用for循环进行O(n)时间复杂度搜索,为了优化到O(logN)级别时,通常会用到二分搜索法。 出现 sorted 字眼时,即已排序的集合时。 模板如下:例1.在升序数组中,找第一个出现target对象的索引描述给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返..原创 2021-10-24 15:47:15 · 335 阅读 · 0 评论 -
算法笔记_面试题_16. 二叉树相关_模板及示例十几道
目录1. 基本概念1.1 常考二叉树种类1.2 二叉树的存储1.3 遍历方式(贯穿整个leecode常考题目)1.4 二叉树的定义2. 相关题目1. 基本概念参考: 代码随想录 carl1.1 常考二叉树种类面试中常考的关于二叉树的种类有以下4种:满二叉树: 每个节点的孩子节点要么是0个, 要么是2个.也可以说深度为k,有2^k-1个节点的⼆叉树。完全二叉树: 满二叉树, 若要是缺少节点,只能是从右往左缺.二叉搜索树: 所有的节点的左子节点到大...原创 2021-10-23 13:07:20 · 344 阅读 · 0 评论 -
算法笔记_面试题_15.回溯算法模板及示例
描述给定一个含不同整数的集合,返回其所有的子集。LintCode 领扣https://www.lintcode.com/problem/17/description力扣https://leetcode-cn.com/problems/subsets/代码及解读参考:力扣https://leetcode-cn.com/problems/subsets/solution/dai-ma-sui-xiang-lu-78-zi-ji-hui-su-sou-6yfk6/class Soluti原创 2021-10-17 18:04:17 · 288 阅读 · 0 评论 -
算法笔记_面试题_14. strStr 长字符串中查找短字符串
描述对于一个给定的source字符串和一个target字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回-1。LintCode 领扣Powerful coding training system. LintCode has the most interview problems covering Google, Facebook, Linkedin, Amazon, Microsoft and so on. We provid...原创 2021-10-17 16:34:35 · 265 阅读 · 0 评论 -
算法面试题_求给定字符串的排列、组合、八皇后问题
首先来看看题目是如何要求的(百度迅雷校招笔试题)。 同剑指offer第二版: "面试题:38"一、题目:字符串的排列用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, 如 abc 的全排列: abc, acb, bca, dac, cab, cba 1.1 全排列的递归实现(不考虑有字符重复)为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显...原创 2021-02-25 21:17:35 · 256 阅读 · 0 评论 -
算法面试_怎么简单高效的理解递归?//TODO
//TODO原创 2021-02-24 11:02:02 · 162 阅读 · 0 评论 -
算法_EXCEL中 A表示第一列,B表示第二列...AA表示27列,AB表示28列,问随意一组字母是多少列
#include<stdio.h>#include<stdlib.h>#include<iostream>#include<math.h>//A-Z:65-90 a-z: 97-122using namespace std;int getColumnNumber(char s[]){ //特殊情况处理 if(s == nullptr) return -1; int number = 0; //统计长度 int i = 0.原创 2021-02-06 16:37:01 · 1450 阅读 · 0 评论 -
SLAM基础_什么是ORB特征,怎么计算的?
目录1. 简介2.特征提取:Fast特征怎样提取特征?怎样保证尺度不变性?怎样保证旋转不变性?解释1= 解释23 特征描述:BRIEF算法描述解释1解释2解释3BRIEF 算法参考:1. 简介ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“O..原创 2020-11-30 08:41:10 · 1073 阅读 · 0 评论 -
算法笔记_面试题_13.二叉树的最近公共祖先
题目面试题68 - II. 二叉树的最近公共祖先难度:简单给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null..原创 2020-07-12 19:28:05 · 226 阅读 · 0 评论 -
算法笔记_面试题_12.二叉搜索树的最近公共祖先
题目面试题68 - I. 二叉搜索树的最近公共祖先难度:简单给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root =[6,2,8,0,4,7,9,null,null,3,5]示例 1: 输入: root = [6,2,8,0,4,7,9,..原创 2020-07-09 18:04:30 · 192 阅读 · 0 评论 -
算法笔记_面试题_11.正则表达式匹配
问题10. 正则表达式匹配难度:困难给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。 p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法...原创 2020-07-01 16:20:27 · 320 阅读 · 0 评论 -
算法笔记_面试题_10.所有可能的满二叉树
问题894. 所有可能的满二叉树难度:中等满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含N个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,...原创 2020-06-30 19:27:50 · 266 阅读 · 0 评论 -
算法笔记_面试题_9.解码方法/数字字符串解码成字母的种类
问题解答思路:代码int numDecodings(string s) { if (s[0]=='0') return 0; vector<int> dp(s.size()+1); dp[0]=1; dp[1]=1; //dp[i]表示i位长度的子字符串,能解码的种类数。 for(int i=1; i< s.size(); ++i) //注意:因为要看当前位的前一位,所以从i=1开始 { if (s[i]=='...原创 2020-06-29 19:34:57 · 655 阅读 · 0 评论 -
算法笔记_面试题_8.零钱兑换
题目322. 零钱兑换难度:中等给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每种硬币的数量是无限的。解法思路:与爬楼梯..原创 2020-06-27 15:24:03 · 488 阅读 · 0 评论 -
算法笔记_面试题_7.颜色分类/荷兰三色旗问题
题目75. 颜色分类难度中等472给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2...原创 2020-06-25 17:52:30 · 338 阅读 · 0 评论 -
算法笔记_面试题_6.二进制/位运算相关
1. 判断一个数是奇数or偶数if((n & 1)==0) 是偶数,else是奇数2. 判断一个数是否是2的n次幂if( (n & (n-1)) == 0 ) 则是, else 不是// 例子: 8 5 1000 0101 & 0111 0100 --------------- 0000 0100// 注意: == 的优先级大于 &...原创 2020-06-25 16:58:36 · 196 阅读 · 0 评论 -
算法笔记_面试题_5.验证二叉搜索树
题目98. 验证二叉搜索树难度:中等给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,nul...原创 2020-06-24 22:23:13 · 176 阅读 · 0 评论 -
算法笔记_面试题_4.树的遍历(前序/中序/后续遍历)
题目144. 二叉树的前序遍历给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?解答递归的方法//数的结构struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NUL...原创 2020-06-23 11:54:53 · 376 阅读 · 0 评论 -
算法笔记_面试题_3.去除数组中的重复元素
题目26. 删除排序数组中的重复项难度简单1484收藏分享切换为英文关注反馈给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1,2你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums ...原创 2020-06-22 23:00:48 · 493 阅读 · 0 评论 -
算法笔记_面试题_2.移动零(将数组的的0元素移到末尾)
问题283. 移动零给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。分析使用交换0和非0元素的方式,实现所有0都到末尾。 关键点在于确定什么时候交换。最优解之一:#include <stdio.h>#include <iostream>#include &...原创 2020-06-22 18:45:21 · 807 阅读 · 0 评论 -
算法笔记_面试题_1.爬楼梯
题目一个人爬楼梯,他可以一次走一阶或者两阶,输入不同的楼梯数,求有多少种不同的走法?问题分析从最后到达终点那阶考虑,记为F(n), 则到达F(n)有两种情况, 从F(n-1)的位置,走一阶到达; 从从F(n-2)的位置,走两阶到达。所以 F(n) = F(n-1) + F(n-2); 即是fibonacci数列的情况。最优算法#include <stdio.h>#include <iostream>int climbStairs(int stairNumb原创 2020-06-22 15:17:14 · 567 阅读 · 0 评论 -
算法笔记_面试_0.刷leetcode攻略
练习方法:五毒神掌:记忆曲线过5遍=第一遍,24h第二遍,2天,一周..原创 2020-07-07 18:47:44 · 258 阅读 · 0 评论 -
算法笔记_面试_0.刷leetcode_基础知识范围
时间复杂度:不考虑系数!与n的关系例子图示:主定理:面试题举例:二叉树的前中后序遍历的时间复杂度为多少? 答:都是O(n), 可以根据主定理算出。或者说: 不管那种遍历方式结节都只访问一次,所以线性于节点数,所以时间复杂度是O(n) 同理:图的遍历/DFS(深度优先)/BFS(广度优先),时间复杂度也都是O(n) 二分查找:时间复杂度:O(logn) 空间复杂度: 数组的长度为n,则时间复杂度为O(n); 对于递归,递归的最大深度即为其时间复杂度。...原创 2020-07-07 18:51:59 · 227 阅读 · 0 评论