offer

剑指offer(18)二叉树的镜像

吃可爱长大的小学妹 提交于 2019-12-10 06:24:56
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:  源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 解题代码: /* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function Mirror(root) { // write code here if(root == null){ return null; } var temp = root.left; root.left = root.right; root.right = temp; Mirror(root.left); Mirror(root.right); return root; } 来源: https://www.cnblogs.com/3yleaves/p/9595309.html

如何拿到华为、拼多多等4家offer?

大城市里の小女人 提交于 2019-12-06 11:53:02
我是黎明: 应届硕士毕业生,男生,传统工科专业,18年6月份决定转数据分析,开始学习EXCEL、统计、SQL、Python等。8月份正式开始找工作,期间边学边找,投递简历40+,笔试30+次,面试10+次。最终拿到华为、拼多多、搜狐畅游等多家offer。 作为萌新,细数下从8月份到现在,秋招过程中求职数据分析岗位的所有的教训。 一、目标不明确 1、行业不明确,制造、互联网和其他,简历海投,没有太大针对性 初衷:给自己留后路,不会毕业即失业 反思: 本身是非常不想进入制造业的,现在想来,还不如断了自己的后路,就不会那么畏畏缩缩。 2、职位不明确,产品运营和数据分析同时投递 初衷:有备无患,多多尝试 反思: 时间和精力全部浪费在如何选择上,真正用在学习上的时间少之又少,导致哪个都懂一点,但是哪个都不精,面试没有优势。 如果再来一次,我一定认准一个 行业 ,认准一个职位。 二、心态不稳定 8-9月整整两个月,满怀信心投递数十份简历,兴奋地参加面试,所有面试凉凉,9月底直接心态爆炸,无数次的怀疑自己、否定自己,担心找不到工作,尤其是身边人一个接着一个拿到大厂的offer,直接开始怀疑人生。 拿到offer后,开始和周围人比较,越发看不上自己的offer,但是很多大厂面试已经跪了,不会再有机会,自此让自己陷入纠结中无法自拔。 反思: 不得不说,在心态管理方面,我是失败的。找工作是持久战

华为社招面试(拿到offer)

僤鯓⒐⒋嵵緔 提交于 2019-12-06 11:52:48
前段时间华为主动联系我要不要面试,抱着试一下的心态接受了面试邀请,最后顺利拿到了offer,不过最终由于方方面面的原因还是没有去。 本文主要分享下,面试的大致过程。 1. 初步电话技术面试 主要问了下,项目C++的后台开发(大概40分钟)。 1. 高并发相关的问题。 2. 以及为什么使用redis做缓存而不是其他的消息队列入kafka,以及项目的稳定性。 3. 问了java,c++哪个更熟悉点,答C++,然后问了很多C++基础(和校招的C++基础问题差不多)。 4. 简历的图像识别相关的,面试官不懂的,基本没有问。 2. 性格测试 电话技术面试过了之后就是性格测试了。 可以参考知乎的回答: 华为招聘时的性格测试依据是什么?难道是按时完成答题? 我在做题的时候基本是按照自己的想法来的,最后也过了。 3. 现场面试 到了深圳,去了对应的部门,会议室有人给我们讲解: 1. 部门的主要工作内容 2. 职业发展 3. 薪资待遇 讲解的过程中,在谈到薪资待遇的时候,讲解人说:入职华为底薪可能不高,不要有太高的期望(最终给我的offer薪资也确实不高,不过也不算很差),说华为主要看奖金和股票(如果你干的好),不过我觉得底薪还是很重要的。 首先是HR面试(HR也懂点技术,只记得大致的面试内容): 1. 你当前的技术发展的最大问题是什么呢?(这个问题我觉得还是挺不错的,即显示了你的当前的技术水平

剑指offer-面试题38-字符串的排列-全排列

心不动则不痛 提交于 2019-12-06 06:38:15
/* 题目: 输入字符串,打印字符串的所有排列。 输入acc,输出[acc, cac, cca]。 */ /* 思路: 将字符串看作两部分,第一个字符串和后面的部分。 将第一个字符串与后面字符串依次交换。求后面部分的全排列。 进入递归,将第二个字符串与后面的字符串依次交换,求后面部分的全排列。 ... 使用set去重。 */ #include<iostream> #include<string.h> #include<stdio.h> #include<set> using namespace std; set<string> all; void getAll(string str,int beginIndex){ if(str.size() == beginIndex){ //cout<<str<<","; all.insert(str); }else{ for(int i = beginIndex; i < str.size(); i++){ //将第一个字符串与后面字符串依次交换 char temp = str[i]; str[i] = str[beginIndex]; str[beginIndex] = temp; //求后面部分的全排列 getAll(str,beginIndex+1); //将第一个字符串与后面字符交换回来 str[beginIndex] = str[i

剑指offer-面试题36-二叉搜索树与双向链表-中序遍历

爷,独闯天下 提交于 2019-12-06 03:23:38
/* 题目: 将二叉搜索树转化为排序的双向链表,不能创建新的节点, 只能调整节点的指向,返回双向链表的头节点。 */ /* 思路: 递归。 二叉搜索树的中序遍历得到的序列是递增序列。 左子树left<=>root<=>右子树right。 左链表left<=>root<=>右链表right。 对于左链表,我们需要它的最后一个节点;对于右链表,我们需要它的第一个节点。 我们设置一个公共节点表示lastNode,函数返回firstNode。 将root节点跟在做链表后,将右链表跟在root节点之后,则得到最终结果。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; TreeNode* lastNode = nullptr; TreeNode*

剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历

ぃ、小莉子 提交于 2019-12-06 00:28:30
/* 题目: 输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径。 */ /* 思路: 先序遍历,深度遍历。 从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出。 回退节点,寻找下一个叶子节点,直到遍历完所有到达叶子节点的路径。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; vector<vector<int>> res; vector<int> path; void FindPathCore(TreeNode* root,int expectNumber,int currentNumber){ path.push_back(root->val); currentNumber += root->val; bool

剑指offer-面试题33-二叉搜索树的后序遍历序列-二叉树遍历

谁都会走 提交于 2019-12-05 20:25:20
/* 题目: 给定一个序列,判断它是否为某个二叉搜索树的后序遍历。 */ /* 思路: 二叉搜索树:左子树<根节点<右子树。 序列的最右端为根节点,小于根节点的左半部分为左子树,大于根节点的右半部分为右子树。 递归法,判断是否为合法的二叉搜索树。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; bool verify(const vector<int> &sequence, int start,int end){ if(start == end) return true; int root = sequence[end]; int separation = start; for(; separation < end; separation++){ if(sequence[separation] > root){ break; } } for(int index = separation; index < end; index++){ if(sequence[index] < root){ return

剑指offer-面试题32-分行从上到下打印二叉树-二叉树遍历

♀尐吖头ヾ 提交于 2019-12-05 17:57:47
/* 题目: 分行按层自上向下打印二叉树。 */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空。 添加两个计数器,current记录当前行的节点数,next记录下一行的节点数。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; void PrintFromTopToBottom(TreeNode* root){ if(root == nullptr) return; deque<TreeNode*> myQueue; myQueue.push_back(root); TreeNode *temp; int current = 1; int next = 0; while(!myQueue.empty()){

剑指offer-面试题32-从上到下打印二叉树-二叉树遍历

和自甴很熟 提交于 2019-12-05 17:53:00
/* 题目: 按层自上向下打印二叉树。 */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; vector<int> PrintFromTopToBottom(TreeNode* root){ vector<int> sequence; if(root == nullptr) return sequence; deque<TreeNode*> myQueue; myQueue.push_back(root); TreeNode *temp; while(!myQueue.empty()){ temp = myQueue.front(); myQueue.pop