offer

【LeetCode】Same Tree

故事扮演 提交于 2019-11-30 01:36:04
【Description】 Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identical and the nodes have the same value. Example 1: Input: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] Output: true Example 2: Input: 1 1 / \ 2 2 [1,2], [1,null,2] Output: false Example 3: Input: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2] Output: false 【AC code】 Reference: https://leetcode.com/articles/same-tree/ 一、递归   时间复杂度:O(n) 1 class Solution { 2 public boolean isSameTree(TreeNode p, TreeNode q) { 3 if (p == null && q == null) return true; 4

跳槽天天有,offer哪家强?

一曲冷凌霜 提交于 2019-11-29 18:21:54
跳槽天天有,offer哪家强? 小伙伴从去年开始,一直叨叨要跳槽,大大小小的公司面试了很多,但总没有拿到一个满意的offer,要么package太低,要么就是面试被虐。经过前几次的面试失利,终于明白了什么叫基础不牢,地动山摇。面试官随便针对一个知识点深入考察一下,就回答不出来,就这样,还怎么能通过面试? 不过,最近收到了小伙伴的捷报,已拿到阿里的offer,公司足够大,base还可以,虽然是个P6,但还是隐隐感觉到他很满意。 其实,我还是有点疑惑,他之前的基础很一般,咋就突然拿到了阿里的offer。后来没忍住,问他: “你最近都干啥了,阿里面试都问你什么了? ” 结果,这小伙最近半年居然一直在闭关修炼,把一些基础的源码慢慢都啃了一遍。 最基本的HashMap 和 ConcurrentHashMap 线程池的源码实现 阻塞队列BlockingQueue相关实现 ReentrantLock 实现,以及其内部同步器Sync的实现原理 Future的实现原理 AtomicXXX是如何运转的 ... 听他讲完,感觉把并发包中的相关实现都系统的整理了一遍。 除了JDK中的源码,还挑了一个自己比较感兴趣的中间件redis,深入的学习了下。 哎,就冲你这个态度,我也想给你offer。 不过,说到源码,有些同学似乎比较反感,总觉得会写代码就成,为什么一定要去了解源码是怎么实现? 看源码的几个好处:

226. Invert Binary Tree

时光怂恿深爱的人放手 提交于 2019-11-28 19:21:43
Invert a binary tree. Example: Input: 4 / \ 2 7 / \ / \ 1 3 6 9 Output: 4 / \ 7 2 / \ / \ 9 6 3 1 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode invertTree(TreeNode root) { Queue<TreeNode> q = new LinkedList(); if(root != null) q.offer(root); while(!q.isEmpty()){ TreeNode p = q.poll(); TreeNode tmp = p.left; p.left = p.right; p.right = tmp; if(p.left != null) q.offer(p.left); if(p.right != null) q.offer(p.right); } return root; } } class Solution { public

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

夙愿已清 提交于 2019-11-28 08:46:41
/* 题目: 分行按层自上向下打印二叉树。 */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空。 添加两个计数器,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,我花了一年时间

送分小仙女□ 提交于 2019-11-28 08:32:27
从简历被拒到收割今日头条offer,我花了一年时间 图 | 阿曼苏丹国 一、印象中的头条 二、面试背景 三、准备面试 四、头条一面电话面(Java+项目) 五、头条二面视频面(大数据+项目) 六、头条三面视频面(算法+场景题) 七、如何通过头条笔试? 八、如何准备头条面试? 九、一个关于如何进大厂的小建议** 一、印象中的头条 ** 1.老板张一鸣跟我是福建老乡,龙岩市在我朋友说来就是山沟沟,能走出美团王兴和头条张一鸣让我卯足了去龙岩吃特产老鼠干的欲望。 2.给的钱多,笔试也贼难。参加过头条笔试的同学都知道,头条笔试可以笔试三次,就是不论你有没有参加都有三次机会。笔试就5道算法题,两个小时,去年第一次看到算法题就自闭了,第一次挂了。第二次又很认真地做,做到一半放弃了。没过几天又邀请我做第三次,有一种强行被侮辱的感觉。 3.内推被拒。正如我标题所说,简历被拒。去年3月份在知乎上看到一个头条大佬说可以内推春季实习,于是私信并发了简历给他。看了我简历之后说头条竞争激烈,我背景不够,点到为止。。(打扰了) 二、面试背景 ** 自从去年被头条笔试的算法凌辱和被头条的前辈指教了之后对头条没啥好感了,也感觉进不去,所以后面大半年都没关注头条的招聘,直到以下两件事情的发生。 1.有一天,之前一块实习的哥们说进了头条,我也蠢蠢欲动打算开始搞了。那时有一个不成熟的想法:「连他都可以进,我应该也可以吧」

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

我怕爱的太早我们不能终老 提交于 2019-11-28 05:48:41
/* 题目: 按层自上向下打印二叉树。 */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空。 */ #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

剑指offer-面试题31-栈的压入弹出序列-栈

笑着哭i 提交于 2019-11-28 03:15:05
#include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> /* 题目: 输入两个整数序列,第一个序列1表示栈的压入顺序,第二个序列2表示栈的弹出顺序。 判断第一个栈是否可以以第二个序列的方式弹出。 */ /* 思路: 设置一个辅助栈,遍历序列2。 若遍历到的序列2的元素与栈顶元素相同,则弹出栈,遍历下一个元素; 若遍历到的序列2的元素与栈顶元素不同或栈为空,则将序列1压入栈,直到相同,或序列1被全部压入栈。 */ #include<vector> #include<stack> using namespace std; bool IsPopOrder(vector<int> pushV,vector<int> popV) { int popVSize = popV.size(); int pushVSize = pushV.size(); if(popVSize != pushVSize) return false; stack<int> myStack; int pushVIndex = 0; for(int popVIndex = 0; popVIndex < popVSize; popVIndex++){ if(!myStack.empty() &&

offer 二维数组查找

ぐ巨炮叔叔 提交于 2019-11-27 13:20:30
二维数组查找: (1)C语言实现方式: 测试用例:int AA[16]={1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15}; bool Find1(int * target, int rows,int colums,int number) //输入的行数和列数 { int row=0, colum=colums-1; //实时变化的 /下标 if (target==NULL||rows<=0||colums<=0)//保持 { return false; } while(row<rows&&colum>=0) { if(*(target+row*colums+colum)==number) //退出循环的条件 { return true; } else if(number< (*(target+row*colums+colum) )) //注意这里二维数组 乘以colums 才对 { colum--; } else { row++; } } return false; } C++实现方式: 来源: https://www.cnblogs.com/cgy1012/p/11365407.html

0-1背包问题

拟墨画扇 提交于 2019-11-27 03:45:33
0-1背包问题 经常写算法的同学肯定遇到的比较,也是一个老生常谈的问题,我们还是简单介绍一下:给定n中物品和一个背包,物品i的重量是wi,其价值为vi,背包的容量为c,我们要如何选择才能使得装入背包的物品的价值最大,而且在选择物品时只有两种中选择,装入和不装入。 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 40508 Accepted Submission(s): 16104 Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。“I NEED A OFFER”,他大叫一声。帮帮这个可怜的人吧,帮助他计算一下,他可以收到至少一份offer的最大概率。