自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 毕业论文相关

四到五章内容,包括引言,背景,研究方法,自己所做的工作,和一章总结。和本科毕业论文相比,内容的深度更深,体现研究更深入,有一章的自己工作原创性较强。建议先完成研究方法部分。等到后面再去确定引言,背景。自己所做的工作基本就是那个SU(4)平均场求解。...

2020-09-29 21:59:47 236

原创 Leetcode 384. 打乱数组 (洗牌算法)

从N个数中随机取一个数放在第一个位置从剩下N-1个数中随机取一个数放在第二个位置。依次放完每一个数。可以证明每个位置每个数都是等可能出现的。可以用数学证明,也可以用递归解释。class Solution {public: vector<int> original_nums; vector<int> current_nums; Solution(vector<int>& nums) { origin..

2020-09-28 23:34:48 154

原创 面试常见Linux命令以及知识

几种常见的文件类型另一方面,Linux 下的目录也是一种文件;但是文件也不只有目录和可执行文件两种。常见的文件类型有以下 7 种:普通文件(比如一个文本文件);目录文件(目录也是一个特殊的文件,它用来存储文件清单,比如/也是一个文件);可执行文件(上面的rm就是一个可执行文件);管道文件(我们会在 07 课时讨论管道文件);Socket 文件(我们会在模块七网络部分讨论 Socket 文件);软链接文件(相当于指向另一个文件所在路径的符号);硬链接文件(相当于指向另一个文...

2020-09-28 17:44:44 527

原创 AA面一组面试题

面试官的title是PRINCIPAL GROUP ENG MGR,流程和之前的传统技面不一样(btw HR说微软技术岗没有传统意义上的HR面,可能这也次也算技面和HR面结合的一种形式?)一上来先问了个人情况,学校,兴趣方向,没让自我介绍然后稍微问了一点点简历的内容就让我反问,给我整蒙了我还以为是HR面,就问了不少工作环境,企业文化,对求职者的要求的问题然后大概30分钟左右又突然开始撕代码:1. 自己想一个场景然后应用mutex做冲突处理,我用伪代码的形式写了一下2. 给两个有序数组

2020-09-25 01:15:09 2065

原创 中文数字转阿拉伯字母思路分析(正向遍历思路和反向遍历思路)

2.1 正向遍历法首先,我们以一百二十三作为第一个要转化的例子,你大概会说,这个用小学学过的知识就可以做到,的确如此!先把中文数字和单位做个映射,然后正向遍历,用数字乘以单位,然后直接把他们累加起来就搞定了。一百二十三的解析式为1*100 + 2*10 + 3,代码如下:# 数字映射number_map = { "零": 0, "一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, ...

2020-09-24 14:03:19 491

原创 微软面试题字符串解码以及Leetcode394 字符串解码

第一题:encode algo: abcde -> c, abde -> cb, ade -> cbd, ae -> cbda, e-> cbdae,相当于每次取剩余字符串的中间字符appendgive encode string like cbdae , return raw data string like abcde.给了deque的解法,问能不能不用dq,然后又换了个方法做、abcde -> cbdae规律是这样 先c放中间然后b放左边,d放右边,a放左边

2020-09-24 12:43:08 190

原创 Leetcode 1079回溯算法和78子集题目

给一个字典序的字符串,输出它abc -> 指定长度的subset接口是一种迭代器遍历,hasnext和next方法我想到的方法是用用子集去剪枝,先预处理一个vector数组class Solution {public: vector<vector<int>> res; vector<vector<int>> subsets(vector<int>& nums) { vector<i

2020-09-23 22:38:40 92

原创 9/23面试题

如何高效率的查找ip地址,Tire树代码题:计算器+,-,*,/,括号

2020-09-23 13:15:10 85

原创 外企笔试面试凉经

1. 微软春招笔试巨难,ACM难度,0AC4月底被捞起来,一二面安排在同一天第一面: Leetcode 1096 Hard, 简化版无括号嵌套版本,这道题目比较难第二面: 大概是- 算法题:给定一堆序列标号(标号用整数),形式为[a,b],表示标号为a,b的两个物体的体积关系满足:a > b,用合适的数据结构存储数据,并判断这堆序列是否有效。(比如[a,b], [b, d], [d, a]这个就不是有效的,因为a > b, b > d, 那么 a > d, 但是最

2020-09-22 23:44:15 569

原创 Leetcode 572 另一个树的子树 : 递归转换为判断树是否相同

递归转化为判断两个二叉树是否相同class Solution {public: bool isSubtree(TreeNode* s, TreeNode* t) { if(s==NULL) return false; if(t==NULL) return true; return isSubtree(s->left,t) || isSubtree(s->right,t) || isSameTree(s,t); } ..

2020-09-22 21:34:09 112

原创 高频面试算法题汇总

面试心态:1. 如果遇到做过,非常熟悉的算法题,和面试官沟通清楚题意,讲清楚思路,然后开始写代码,做到bug free.2. 如果遇到见过,但不是那么容易的算法题,比如Leetcode 4题, 将中文数字转换为数字,那么不要急,多列举一些case,和面试官多交流,沟通。尽可能说清楚思路,然后把代码写出来。3. 如果遇到从来没见过的题目,不要慌,冷静下来,慢慢想,一个小时的时间,先沟通清楚题目,想清楚思路,然后和面试管说思路,如果实在不会,问面试管又没有提示,然后我们自己把代码写出来。1.

2020-09-22 20:49:34 651

原创 微软高频面试模拟题: 平衡二叉树,最大子列和

这道题目比较简单,但是写的时候要注意,建议在求左子树的高度和右子树的高度的同时,判断树是否平衡,这里用的技巧就是在返回值下功夫,当平衡时,返回正常的树的高度,当不平衡时,返回值就返回-1/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x),..

2020-09-22 20:10:46 114

原创 微软高频面试题: Leetcode 543. 二叉树的直径

我们发现:最长距离一定是两个叶子节点之间的距离,两个叶子节点的距离,可以通过根节点的深度来过度,那么是不是直接求出从根节点出发的左右深度,一加就行了呢?看下面的例子:因此,要在搜索的时候,记录下所有左子深度和右边深度的最大值,取一个max,就是答案, 在求深度的时候,同时记录答案/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ..

2020-09-22 18:32:01 136

原创 微软高频面试模拟题: 数组中第K大的元素:快速选择算法

说下思路:首先选第一个数作为pviot,然后通过一趟快排操作将他放到正确位置,如果此时他正好是距离右端点的第k个数,那么这个就是第k大的数,如果他距离右端点的记录大于k,则说明,要找的数在这个点右边,如果距离小于k,说明要去左边找k-(end-left+1)个数。class Solution {public: int findKthLargest(vector<int>& nums, int k) { int n = nums.size(); ..

2020-09-22 16:46:22 171

原创 微软面试模拟题 Leetcode 4 两个排序数组找到第k小的数

这道题目比较难,首先与面试管沟通整体思路:先取第一个数组的第k/2个数,和第二个数组的第k-k/2个数,如果这两个数相等,那么这个数就是第k小的数。如果第一个数组的第k/2个数小于第二个数组的第k-k/2个数,那么答案一定不可能在第一个数组的start1到start1+k/2-1, 以及第二个数组的第k-k/2+1到end2,同时这个数就一定能砍掉na。可以用反证法来证明,假设在第一个数组第k/2个数之前,那么相加一定超过k。如果在第二个数组的k-k/2之后,也会矛盾。同理反过来也一样。

2020-09-22 14:22:39 599

原创 微软高频面试模拟题 Leetcode91 解码方法 输出所有方案

如果要求输出所有方案,就是典型的回溯的方法,一位一位的向后搜所即可。class Solution {public: int ans = 0; vector<string> res; int numDecodings(string s) { string path; dfs(s,0,path); for(auto a:res) cout<<a<<endl; return a..

2020-09-22 12:45:00 119

原创 9月22日 微软高质量面经

4.25今天面完了苏州微软的最后一面,或许是我春招的最后一面了,成功与否春招似乎都要画上句号了。还是想记录下苏州微软这边的面经,我这边流程可能和正常流程不太一样(仅供参考)。4.22 苏州onsite 平行面一面面试官是个很温柔的小姐姐。1. 先简单的自我介绍2. 直接开始写题--最大子序列和(Leetcode原题)之前有做过所以10min左右写完,在小姐姐的引导下开始考虑一些边界情况:讨论过程中有涉及到防御式编程的一些技巧类似断言和错误处理(当时忘了提barricade好像)。第二道题.

2020-09-22 00:26:23 402

原创 微软高频面试模拟题: 验证合法的ipv4地址

- 给定一个字符串,判断是否是有效的IP地址(提示,有效的IP地址格式是xxx.xxx.xxx.xxx, xxx在0-255之间)(输入不保证都是这种格式,要自己判断,同时001这种是否有效要问面试官)去除开头的空格输入:IP = "172.16.254.1"输出:"IPv4"解释:有效的 IPv4 地址,返回 "IPv4"首先想最直接的,允许使用split函数的思路:思路: 首先一定要有三个点,如果没有三个点,一定是不合法的。然后就可以用split,将每一部分单独拆分出来,变成四部

2020-09-22 00:11:31 612

原创 微软面试模拟题 Leetcode 108. 将有序数组转换为二叉搜索树

每次取中点作为根节点,递归的处理,就能保住构建出来的二叉树一定是平衡二叉树。class Solution {public: TreeNode* sortedArrayToBST(vector<int>& nums) { return helper(nums,0,nums.size()-1); } TreeNode* helper(vector<int>& nums, int start, int end){ ..

2020-09-21 23:17:15 126

原创 微软高频面试模拟题 剑指 Offer 33. 二叉搜索树的后序遍历序列

我们知道,后续遍历数组最后一个元素就是根节点。由于二叉搜索树的左子数比根节点小,右子数比根节点大。所以由此可以确定出左右子树,然后递归的做下去。如何判断不是二叉搜索树,先确定左子数,然后判断右子数是否都大于根节点。class Solution {public: bool verifyPostorder(vector<int>& postorder) { return dfs(postorder,0,postorder.size()-1); ..

2020-09-21 19:58:44 87

原创 微软面试模拟题: BST中找到比K大的第一个数

思路1:直接中序遍历。找到比K大的第一个就输出,时间复杂度是O(N)思路2: 二叉搜索数的二分查找,如果当前根节点的值比要查找的值大,那么就到左子数中去找,同时维护当前的最大值,如果否,就右子数中去找。比较根节点和k的大小,比k大就到左子树找,反之到右子树少,同时用一个变量保存比k大的值,如果之后再遇到比k大的就更新变量,最后输出就行。...

2020-09-21 18:08:13 204

原创 微软面试高频模拟题:Leetcode 89 格雷码

一般这道题目,在面试时,会给出n=4之前的格雷码,然后找规律:规律是n+1位格雷码的前一半是在n位格雷码的前面添0,后一半是轴对称翻转一次后前面添1。所以可以这样实现:class Solution {public: vector<int> grayCode(int n) { vector<int> res; res.push_back(0); int t = 1; while (n ...

2020-09-21 17:21:27 132

原创 微软高质量面经

第一题是按序输出格雷码。输入的参数是格雷码长度N。刚上来可能紧张,没什么思路。面试官问了我一下,就提示我是不是可以从前一个序列中找到规律。我一下子反应过来,就跟他说了我的想法。一般在交流后如果觉得你的思路没问题,就开始在白板上写代码。要求是能运行的代码。第二题是最长递增子序列。Longest Increasing Subsequence - LeetCode我首先想到动态规划方法,就跟面试官说了一下。他说可以的,你想一下方程吧。想好后和他交流了一下,这次没让我写代码,但让我继续优化。不过这次

2020-09-21 16:15:54 340

原创 Leetcode 538/1038 把二叉搜索树转换为累加树 (利用中序遍历求前缀和)

这道题目直接递归做,不是很好做,我们知道,二叉搜索树的中序遍历一定是升序数组,所以如果先开一个数组,把中序遍历结果存起来,在中序遍历改值,即可。这个过程可以合并到一步,根据特点是反向前缀和。所以用反向中序遍历解决。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(..

2020-09-21 14:52:15 125

原创 Leetcode 1589. 所有排列中的最大和 (贪心加差分优化)

贪心的思想:查询次数最多的数,搭配最大的数,和最大。直接做的话,扫描区间时间复杂度是O(n^2)超时class Solution {public: const int mod = (int)1e9+7; int maxSumRangeQuery(vector<int>& nums, vector<vector<int>>& requests) { sort(nums.begin(),nums.end());..

2020-09-21 14:10:23 302

原创 高频面试题:并查集介绍

有n个二维平面上的点和距离d,将它们分成k组。若两点间的距离小于等于d,则这两个点在一组;如果点A和点B在一组,点B和点C在一组,则点A和点C在一组。算法返回每个点所在组的编号(0..k-1)典型的并查集问题并查集,两重循环枚举点,连起来,时间复杂度O(N^2)关于并查集的模板:代码特别短,只写路径压缩:p[x] 表示x的父亲节点,初始化p[x] = x核心函数:find(x) 返回x的祖宗节点,考虑路径压缩以后的写法:int find(int x){...

2020-09-20 22:33:11 188

原创 微软面试题总结

一面:1. 反转单链表2. 剑指offer 第一题 二维数组查找(二分优化)3. leetcode1314二面:一个逗号分割的csv文件 转化成二维矩阵考虑各种情况(双引号里有双引号,一行没有正常结束等) 状态机三面:文件1有两列,p和k string 类型,用\t隔开文件2有两列,p1,p2,,,,pn和k1,k2,,,,kn 每列多个字符串用,隔开,两列用\t隔开输出文件2中包含文件1行的所有行 哈希建索引四面:项目问题剑指...

2020-09-20 18:27:51 1280

原创 Leetcode 1314. 矩阵区域和 转化二维前缀和

这道题目要可以确定边界,然后巧妙转化为二维前缀和问题, 注意边界的特殊处理。时间复杂度O(n^2)class Solution {public: // 1 2 3 // 4 5 6 // 7 8 9 vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int K) { int n = mat.size(), m = mat[..

2020-09-19 21:40:40 151

原创 Leetcode 304. 二维区域和检索 - 矩阵不可变 (二维前缀和)

预处理一个二维前缀数组,这个前缀数组的计算利用容斥原理。在O(1)时间求区域和的时候利用公式:class NumMatrix {public: vector<vector<int>> preSum; NumMatrix(vector<vector<int>>& matrix) { int n = matrix.size(); if(n==0) return; int ...

2020-09-19 20:25:40 167

原创 面试准备:英文介绍项目

Third party SDK international market research projectObjective: statistics of the market share of the third-party SDK applications in the international marketMethod:First: Web crawler get all App download url and downloadapp from Google Play b...

2020-09-19 12:34:39 1402

原创 英文描述疫情的生活状态

关键词:COVID-19Wear a mask 戴口罩stay at home work from homewash hands frequencilytake temperature everyday 量体温online classReport your location information every dayHealthy clock in健康打卡

2020-09-19 12:15:56 619

原创 9/19微软最新面经

一面:1. 反转单链表2. 剑指offer 第一题 二维数组查找(二分优化)3. leetcode1314二面:一个逗号分割的csv文件 转化成二维矩阵考虑各种情况(双引号里有双引号,一行没有正常结束等) 状态机三面:文件1有两列,p和k string 类型,用\t隔开文件2有两列,p1,p2,,,,pn和k1,k2,,,,kn 每列多个字符串用,隔开,两列用\t隔开输出文件2中包含文件1行的所有行 哈希建索引四面:项目问题剑指...

2020-09-19 11:54:46 285

原创 简单的英文自我介绍

Good afternoon, It‘s really a great honnor for me to have this interview. (客套话)My name is XX, you can call me XX, well, now I will introduce mysely briefly. (介绍名字)I am currently a graduatestudent in Nanjing University, I major inComputation...

2020-09-19 11:24:21 408

原创 难度较大的微软面试题

一面:英文自我介绍,第一题是个模拟,给一种字符串加密方法,加密过程是把一个串不断左右左右移动: abcde => dbace,你需要写一个还原函数,简单模拟,注意长度 奇数偶数分开讨论。。O(n)解决。。但是可以常数小一点。。第二题。给一个森林(数组形式),每个树有个高度,现在我要选一个高度,高于这个高度的树木会被砍下,我只砍一次,在给定个目标树木和target, 要求看下的树木之和在>= target 基础上尽可能小,求最接近的答案简单的二分。。。 O(n) check....

2020-09-18 16:20:48 1669

原创 微软面试模拟题 Leetcode 124 二叉树中的最大路径和

;‘思路是先解决一个子问题,求从当前根节点出发到左子树或者右子树某一个节点的最大值。然后这两个节点之间的最大值就能求出来,在递归的同时,记录一个答案,就能求出题目要求的最大值。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), l.

2020-09-18 14:09:57 101

原创 微软面试模拟题 Leetcode10题 正则表达式匹配

这是典型动态规划推公式的题目://dp[i][j]表示p的前j个字符串是否能匹配s的前i个字符串//ifs[i-1]=p[j-1]||p[j-1]=='.'dp[i][j]=dp[i-1][j-1] //ifp[j-1]=='*'dp[i][j]=dp[i][j-2] ||dp[i-1][j-2]&&s[i]与p[j-1]匹配 ||dp[i-2][j-2]&&s[i...

2020-09-18 13:45:51 119

原创 微软面试模拟题 Leetcode44 通配符的匹配 (dp方程的推导和优化)

需要推导dp方程,dp[i][j] 表示字符串p的前j个字母,是否能匹配字符串s的前i个字母。然后推导转移方程:如果 s[i-1]==p[j-1] || p[j-1]=='?', 那么dp[i][j] = dp[i-1][j-1]如果p[j-1]=='*', 那么dp[i][j] = dp[i][j-1] // 匹配0个 | dp[i-1][j-1] 匹配一个 | dp[i-2][j-1] 匹配两个 | dp[0][j-1] 匹配N个这个可以用数学等价变形为 dp[i][j] = dp...

2020-09-18 12:08:28 105

原创 微软模拟面试题 Leetcode 450. 删除二叉搜索树中的节点

思路:TreeNode*deleteNode(TreeNode*root,intkey) 表示删除值为key的节点,如果root->val > key,说明要去左子树里面删除,把root->left 重新赋值为删除左子数后的新的根节点。同理如果root->val < key,说明要去右子数里面删除,删完后也要把root->right 赋值。假设此时root->val == key, 如果root是叶子节点或者,root只有一个节点,那么返回叶子节点...

2020-09-18 01:01:50 113

原创 微软面试模拟题: Leetcode236 二叉树的最近公共祖先

最近公共祖先的定义: 设节点 root 为节点 p, q的某公共祖先,若其左子节点 root.left和右子节点 root.right 都不是 p,qp,q 的公共祖先,则称 root 是 “最近的公共祖先” 。定义函数的返回值如下: 假如从根节点,包含p和q,则返回最近公共祖先假如不包含p和q,则返回NULL假设只包含p,就返回p,假如只包含q,就返回q。因此:class Solution {public: TreeNode* lowestCommonAncest...

2020-09-17 22:29:12 80

原创 微软面试模拟题 Leetcode 91. 解码方法

思路是动态规划的思路:dp[i]表示前i个字符串解码方法的总数,为了避免边界情况,i从1开始。对于第i位来说,如果第i位不是0,那么dp[i] 可以从dp[i-1]转移过来,如果第i-1位和第i位是10-26的数,那么dp[i]可以从dp[i-2]转移过来。写代码:class Solution {public: int numDecodings(string s) { // 动态规划 dp[i] 表示前i个字符的解码方式 s = " "+s; ..

2020-09-17 21:55:34 99

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除