算法面试题
文章平均质量分 61
记录牛客题霸中的面试真题
Nefu_lyh
这个作者很懒,什么都没留下…
展开
-
【ACwing】二、 数据结构_并查集模板题:836. 合并集合 837. 连通块中点的数量 240. 食物链
836. 合并集合 837. 连通块中点的数量 240. 食物链原创 2022-04-25 20:29:04 · 1928 阅读 · 0 评论 -
【ACwing】二、 数据结构:829. 模拟队列 830.单调栈 154. 滑动窗口 831. KMP字符串 835. Trie字符串统计 143. 最大异或对
829. 模拟队列830.单调栈154. 滑动窗口831. KMP字符串835. Trie字符串统计143. 最大异或对原创 2022-04-24 22:21:24 · 1284 阅读 · 0 评论 -
网易2021校招笔试-Java开发工程师(正式第二批)电影院选座
文章目录[编程题]电影院选座[编程题]电影院选座#include <bits/stdc++.h>using namespace std;const int N = 1010;int a[N];int main(){ int index=0,res=0; //index表示数组的长度,res记录最大距离 //读取输入字符串 string s; getline(cin,s); for(int i=0;i<s.size();i++){原创 2022-04-22 19:57:58 · 906 阅读 · 0 评论 -
leetcode真题——二叉树:236. 二叉树的最近公共祖先 700. 二叉搜索树中的搜索 235. 二叉搜索树的最近公共祖先
236. 二叉树的最近公共祖先 700. 二叉搜索树中的搜索 235. 二叉搜索树的最近公共祖先原创 2022-04-10 14:14:02 · 1022 阅读 · 0 评论 -
leetcode真题——二叉树:106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树 654.最大二叉树
106. 从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树原创 2022-04-09 14:49:21 · 1992 阅读 · 0 评论 -
leetcode真题+牛客面试真题——字符串汇总:344. 反转字符串 541. 反转字符串 II 05. 替换空格 151. 颠倒字符串中的单词
344. 反转字符串541. 反转字符串 II05. 替换空格151. 颠倒字符串中的单词58 - II. 左旋转字符串KMP:28. 实现 strStr()459. 重复的子字符串BM84 最长公共前缀BM86 大数加法BM85 验证IP地址(待做)NC116 把数字翻译成字符串原创 2022-04-05 15:09:11 · 1498 阅读 · 0 评论 -
leetcode——哈希汇总:leetcode 1002. 查找共用字符 leetcode 349. 两个数组的交集 leetcode 202. 快乐数 JZ75 字符流中第一个不重复的字符 leet
文章目录前置知识点:leetcode 1002. 查找共用字符leetcode 349. 两个数组的交集leetcode 202. 快乐数JZ75 字符流中第一个不重复的字符leetcode1. 两数之和leetcode 15. 三数之和参考自:https://gitee.com/programmercarl/leetcode-master/blob/master/problems/前置知识点:(1)哈希表都是用来快速判断一个元素是否出现集合里,但是牺牲了空间来换取时间,因为我们要使用额外的数组,se原创 2022-04-03 16:04:24 · 842 阅读 · 0 评论 -
牛客题霸面试真题——二分:BM17 二分查找-I BM18 二维数组中的查找 BM19 寻找峰值 BM20 数组中的逆序对 BM21 旋转数组的最小数字 BM22 比较版本号
文章目录BM17 二分查找-IBM18 二维数组中的查找BM19 寻找峰值BM20 数组中的逆序对BM21 旋转数组的最小数字BM22 比较版本号BM17 二分查找-I二分使用的前提:数组中无重复元素、且有序。class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int原创 2022-04-03 08:26:31 · 768 阅读 · 0 评论 -
leetcode真题——数组汇总: 27. 移除元素 977. 有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II
文章目录27. 移除元素977. 有序数组的平方209. 长度最小的子数组59. 螺旋矩阵 II27. 移除元素https://leetcode-cn.com/problems/remove-element/快慢指针,慢指针指向当前数组元素,快指针指找非val的元素给nums[slow]赋值class Solution {public: int removeElement(vector<int>& nums, int val) { int slow =原创 2022-04-01 09:59:30 · 946 阅读 · 1 评论 -
牛客题霸面试真题——二叉树:BM29 二叉树中和为某一值的路径(一)
文章目录递归初始版递归精简版迭代https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c递归初始版思路:让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。如果到了叶子节点最后count == 0,说明找到了目标和;反之如果遍历到了叶子节点,count不为0,就是没找到。/** * struct TreeNode { * int val; * struct TreeNode *left; * str原创 2022-03-27 13:44:47 · 1177 阅读 · 0 评论 -
字节跳动2018校招测试开发方向(第二批)
文章目录第一题第二题第一题# include <bits/stdc++.h>using namespace std;vector<int> res,tmp;map<int,vector<int>> m;int n,love;int nn,l,r,k,num;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&lo原创 2022-03-25 16:03:50 · 944 阅读 · 0 评论 -
剑指offer——二叉树:513. 找树左下角的值
文章目录递归迭代递归找最深且最左的节点,首先想到的是用先序遍历,先序遍历一定先得到最左边的节点但不能保证此时就是最深的层,所以按照先序递归进行遍历时要记录此时树的深度,当出现了更大的深度,此时就要对最左的节点进行更新。如果到达了叶子节点就要判断此时的最左节点是否需要更新,然后回溯。没有达到叶子结点,当前的深度++,继续递归左右孩子,左右孩子到达叶子结点回溯后,要修改深度。/** * Definition for a binary tree node. * struct TreeNode {原创 2022-03-19 21:52:31 · 844 阅读 · 0 评论 -
剑指offer——二叉树:404.左叶子之和
文章目录思路:递归代码:精简递归代码迭代代码:https://leetcode-cn.com/problems/sum-of-left-leaves/submissions/思路:首先明确左叶子的概念:设当前的根节点是root,当前节点的左孩子不为空,且左孩子左右都为空时,root->left为左叶子。求左叶子的问题可以变成求左子树的叶子+右子树的左叶子问题,因为要用左右子树的左叶子和求root的左叶子和,所以遍历顺序为左右中或者右左中。确定函数参数及返回值:参数(根节点),返回值int原创 2022-03-19 21:15:19 · 1238 阅读 · 0 评论 -
牛客题霸面试真题——二叉树:BM36 判断是不是平衡二叉树
文章目录思路代码原题链接:https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222思路已知叶子结点的高度为1,根节点的高度最大。(下图参考自代码随想录)要想判断是否时平衡二叉树,就是要左右子树的高度差,那么就要从底向上遍历二叉树,也就是按照先序遍历(中左右)。所以写成递归如下,当节点为空时返回0,只要在遍历的过程中出现了左右子树的高度差>1,就无须再执行函数,直接返回false即可。如果左右子树的高度差<=1,原创 2022-03-19 17:45:30 · 1314 阅读 · 0 评论 -
牛客题霸面试真题——二叉树:BM31 对称的二叉树
文章目录思路递归初版代码递归简化版代码队列迭代法栈迭代法原题链接:https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb思路比较二叉树是否是轴对称的,其实就是比较左右子树,左右子树是否对称的问题又可以划分为,左右子树的左右子树是否对称,。。。 以此类推,这样就可以得到一个递归的解法,就是传入参数root->left,root->right,写一个递归函数判断是否对称,对称返回true,否则返回false。那么原创 2022-03-18 17:04:06 · 989 阅读 · 0 评论 -
牛客题霸面试真题——二叉树:BM28 二叉树的最大深度
文章目录BM28 二叉树的最大深度代码BM28 二叉树的最大深度建议把层序遍历看懂,在看这个题。只要把层序遍历中存储每层节点的数组tmp去掉,存储最终遍历结果的二维数组去掉,加上一个记录高度的变量height即可。层序遍历解析请看:https://blog.csdn.net/qq_46126258/article/details/123517663#BM26__111代码/** * struct TreeNode { * int val; * struct TreeNode *left;原创 2022-03-16 14:23:59 · 1297 阅读 · 0 评论 -
牛客题霸面试真题——二叉树:树的先序、中序、后序、层序遍历(BM23~26)
BM23 二叉树的前序遍历BM24 二叉树的中序遍历BM25 二叉树的后序遍历的递归、迭代、统一迭代写法原创 2022-03-16 14:08:36 · 1547 阅读 · 0 评论 -
牛客题霸剑指offer单项汇总——链表(共13道)
该文章是面向面试而整理的链表题目汇总,把基本的链表题目解法以及问题进行分类汇总的原创 2022-03-15 13:58:08 · 1401 阅读 · 0 评论 -
牛客题霸面试真题——链表:JZ35 复杂链表的复制
文章目录1、原题链接:2、题目理解:3、解法一:4、解法二:1、原题链接:https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba2、题目理解:(1)要理解什么是深拷贝,什么是浅拷贝?假设B复制了A,修改A的时候,看B是否发生变化:如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)浅拷贝(shallowCopy)只是增加了一个指针原创 2022-03-15 13:44:52 · 1106 阅读 · 0 评论 -
牛客题霸面试真题——链表:JZ22 链表中倒数最后k个结点
文章目录原题链接:https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9使用快慢指针,先让快指针走k步,然后slow、fast按相同速度走,当fast=nullptr时,slow到达倒数第k个位置/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** *原创 2022-03-13 20:59:18 · 1366 阅读 · 0 评论 -
【ACwing】三、 动态规划:背包问题—— 3. 完全背包问题
文章目录(1)知识点+模板(2)题目(3)初级代码思路:(4)初级代码(5)化简式子优化代码(6)滚动数组优化代码复盘易出错的位置化简式子优化VS滚动数组优化的时间比较(1)知识点+模板(2)题目原题链接:https://www.acwing.com/problem/content/3/(3)初级代码思路:按照物品 i 选择几个来对集合进行划分,先循环遍历物品,再循环遍历背包数量,再遍历物品的个数(控制体积和<=容积m),那么最大价值的更新策略 = 刨去当前选择的 k 个物品 i 的最大原创 2022-03-05 19:02:59 · 1144 阅读 · 0 评论 -
【ACwing】三、 动态规划:背包问题—— 2. 01背包问题
文章目录(1)知识点+模板(2)题目(3)思路:(4)初级代码(5)用滚动数组优化代码复盘易出错的位置二维数组与以为滚动数组的时间比较动态规划:dynamic planning(简称DP)(1)知识点+模板(2)题目原题链接:https://www.acwing.com/problem/content/2/(3)思路:在背包容量逐渐递增的过程中选择最大价值的物品,逐个遍历各物品,每个物品的组合在不同容量下的价值不同。当前容量 j 下 前 i 个物品的最大价值 = max(不选当前商品的价值,原创 2022-03-05 15:32:44 · 1089 阅读 · 0 评论 -
【ACwing】三、 搜索与图论:拓扑排序—— AcWing 848. 有向图的拓扑序列
文章目录(1)知识点+模板(2)题目(3)思路:(4)代码复盘易出错的位置(1)知识点+模板模板:(2)题目原题链接:https://www.acwing.com/problem/content/850/(3)思路:根据输入的a、b创建邻接表,并将b的入度++,由于拓扑序列的起始位置为入度为0的点,所以将其都加入队列中。循环中找队头 t 的下一个位置(即队头的出边 j ),将队头 t 出队后,j 的入度应当 -1,此时判断 j 的入度是否为0,如果为0那么将节点 j 加入队列。重复上述循环直原创 2022-03-02 11:18:00 · 959 阅读 · 0 评论 -
【ACwing】三、 搜索与图论:树与图的广度优先遍历—— 847. 图中点的层次
本文是搜索与图论中的广度优先遍历,按一层一层的顺序找到节点n到起点的最短距离,使用了非常基本的bfs框架,分别使用了数组模拟队列的方式以及库自带的队列的实现方法原创 2022-03-02 08:26:12 · 908 阅读 · 0 评论 -
【ACwing】三、 搜索与图论: 树与图的深度优先遍历——846. 树的重心
此文章探索了对图的深度优先搜索的初学题目,求树的重心包括了对求子树大小、什么是重心、怎么求中心、图的存取及深度优先遍历。在存储上使用了邻接表即数组+模拟链表。原创 2022-02-21 18:40:36 · 973 阅读 · 0 评论 -
【ACwing】三、 搜索与图论: BFS——844. 走迷宫
本篇文章是一个简单的BFS问题,并用图示的方式详细解析了走迷宫问题的过程原创 2022-02-19 11:58:24 · 1404 阅读 · 0 评论 -
牛客题霸面试真题——DFS:NC39 N皇后问题
文章目录引入分析代码:NC39 N皇后问题复杂度引入分析代码:#include <iostream>using namespace std;const int N = 20;int n;char path[N][N];bool col[N],bg[N],ubg[N];void dfs(int u){ if(u==n){ for(int i=0;i<n;i++) puts(path[i]); puts("");//换行原创 2022-01-28 20:50:56 · 1372 阅读 · 0 评论 -
牛客题霸面试真题——DFS:NC43 没有重复项数字的全排列
文章目录引入DFS的基础题NC43 没有重复项数字的全排列引入DFS的基础题思路:用 path数组记录每个可能的解,state数组记录num各个位置的值有没有使用过,如:state[1]=true 表示num[1]在path中已经使用过一次了。在dfs中传入参数u表示当前添加path[u]的值,当u==n时,path中填满了数据,此时将解输出;当u!=n时,在for循环中遍历num中的每个位置,为当前位置u找填入的值。如果当前 i 位置的没有被用过,就将num[i]加入解path中,并为path原创 2022-01-27 23:11:17 · 1093 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC2 重排链表
文章目录1、题目分析:1、题目分析:这时就要考虑如何依次找到1和2?用一个指针p初始化为head,后续依次后移这样就能在两步遍历到节点1和节点2还要考虑如何依次找到5和4?由于链表是不可倒序遍历的,所以这里可以先将后半截链表倒序,这样依次就能遍历到5和4了解法图示:代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L原创 2022-01-25 09:09:25 · 788 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC51 合并k个已排序的链表
文章目录解法一解法二:解法对比解法一首先将第一个链表摘出来,然后遍历各个链表的头,不断地将其和第一个链表进行合并。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNod原创 2022-01-20 22:29:22 · 1219 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC66 两个链表的第一个公共结点
文章目录解法一:解法二:解法三:解法比较推荐解法:解法二、解法三(解法一是自己想的,感觉比较笨拙)解法一:启发文章参考https://blog.csdn.net/qq_46126258/article/details/121108156,大致意思就是,将短的那个链表的最后一个节点连在头,如果两个链表有重复的节点,那么此时会形成一个环;如果此时没有重复的节点,那么会有一个链表形成了环而另一个没有。此时用快慢指针遍历两链表,如果任意一个遇到了nullptr说明两链表无共同节点,如果快慢指针相遇说明有共原创 2022-01-19 23:00:49 · 901 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC21 链表内指定区间反转
题目链接:https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c解法一:时间复杂度 O(n),空间复杂度 O(1)参考自链接:https://blog.nowcoder.net/n/2ae2952094df466da2ea25436cf21838思路: 先找到待翻转链表的前一个节点pre,和待翻转链表的尾节点right,依此找到待翻转链表的头节点left(left=pre->next),和待翻转链表的后一个节点ne原创 2022-01-13 17:21:21 · 842 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC133 链表的奇偶重排
题目大意可参照示例2,即链表中的各个节点对应着序号1~n,将奇数序号的节点按序连接(序号1->序号3->序号5->…),偶数序号的节点按序连接,最后将奇数链表与偶数链表相连,返回合并后的head。时间复杂度O(n),空间复杂度O(n),表示最多的只能有一层循环,那么可以通过一次遍历将属于奇数序号的节点连在奇数链上,偶数序号的节点连在偶数链上。下图为偶数节点和奇数节点分别对应的while结束条件。/** * struct ListNode { * int val; * stru.原创 2021-12-13 14:38:16 · 895 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC96 判断一个链表是否为回文结构
文章目录解法一:对后半段进行翻转,再逐个比较解法二:使用栈从后向前遍历时间比较解法一:对后半段进行翻转,再逐个比较如果此题是判断一个字符串是否为回文结构的话,那么很容易想到:用两个指针,左边的指向头部,右边的只指向尾部,两边同时向中间移动逐字匹配,如果发现有一个没有匹配上那么此串边不是回文结构。此题使用的是链表,只能从头向尾的方向进行移动,所以不能直接按照上述方法进行匹配。如果想按上述步骤进行,需要将中间到后面的节点间的next反向,这样才能从尾部向中间进行移动。(注:如果该链表是回文结构,那么一定原创 2021-12-13 10:42:30 · 927 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC33 合并两个排序的链表
要求时间复杂度为O(n),说明只能存在一层循环。空间复杂度为O(1),说明新申请的节点必须是有限个数,不能为新的结果链表的每个节点依次申请空间,也就是说只能连接新链表的next指针l来得出最终的结果。解法一(递推/迭代):/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListN..原创 2021-11-09 21:21:34 · 1486 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC53 删除链表的倒数第n个节点
文章目录解法一(快慢指针):解法的运行时间对比可以看出时间复杂度为O(n),所以解法中只能用一层循环,否则要超时。解法一(快慢指针):**思路:**若要删除倒数第n个节点,则需让fast与slow之间始终保持n-1的间隔,这样fast到达最后一个节点的时候slow位于倒数第n-1+1+1个节点(n-1为间隔,1为fast所指的节点,1为slow及诶单本身)。初始化的时候,fast、slow都指向head即第一个节点。让fast先走n步即n个next,这样才能使slow与fast间隔n-1。然后f原创 2021-11-06 11:27:49 · 698 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC78反转链表
题目网址:https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca样例:输入:{1,2,3}返回值:{3,2,1}输入:{}返回值:{}说明:空链表则输出空 nullptr关键字 C++定义了nullptr关键字用作空指针,是std::nullptr_t类型的(constexpr)变量。它可以转换成任何指针类型和bool布尔类型(主要是为了兼容普通指针可以作为条件判断语句的写法),但是不能被转换为整数。ch原创 2021-10-28 22:17:58 · 664 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC25 删除有序链表中重复的元素-I、NC24 删除有序链表中重复的元素-II
文章目录NC25 删除有序链表中重复的元素-INC24 删除有序链表中重复的元素-IINC25 删除有序链表中重复的元素-I原题链接:https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** *原创 2021-11-04 22:54:42 · 841 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC50 链表中的节点每k个一组翻转
原题链接:https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e关联企业:腾讯、字节、京东答案参考自:https://blog.nowcoder.net/n/147174dd168444a591656c82ee055d38(1)已知反转以a为头结点的链表其实就是反转a到null之间的结点,那么反转a到b之间的结点就只需要把之前写的nullptr改为b,此功能由Reverse_a_b来实现(2)从head开始找到间隔k的节原创 2021-11-02 22:22:34 · 710 阅读 · 0 评论 -
牛客题霸面试真题——链表:NC3 链表中环的入口结点
原题链接:https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4解法一:记录每个节点的出现记录,第一个出现两次的节点为入口。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public:原创 2021-11-02 20:55:12 · 717 阅读 · 0 评论