随笔分类 - 微软面试
微软面试手撕算法题
摘要:解决 TOP k 问题通常可采用 堆排序 和 快速排序的思想 1. 大根堆(前 K 小) / 小根堆(前 K 大): 时间复杂度O(NlogK) c++ STL 中提供了 priority_queue 实现堆的基本功能,比如 priority_queue <int> pq; 堆 pq 的元素都是 i
阅读全文
摘要:本文参考 Leetcode 547. 省份数量 题解区:https://leetcode-cn.com/problems/number-of-provinces/solution/python-duo-tu-xiang-jie-bing-cha-ji-by-m-vjdr/ 一 . 并查集 基本概念
阅读全文
摘要:方法一: 单调栈(单调递增栈) 1. 对给定数组 A[ ] 中的每个元素 A[i] ,如果能 求出包含 arr [ i ] 并以 A[i] 为最小元素的所有子数组个数n[i], 则元素 A[i] 对答案 ans 的贡献为n[i]* A[i] 。 2. 那么我们可以先求包含 A[i] 并以A[i]为最
阅读全文
摘要:方法一 中心扩散法 解析: 回文串一定是 中心对称的,回文串的对称中心可能是 1 个字符,也可能是 2个字符,遍历 s 中的 字符 分别以 s[i] 和s[i] 、s[i+1] 为中心像两边扩散,记录 最长 回文串的 起始位置 和长度。 时间 O(n ^ 2) 空间 O(1) 代码: 1 //方法一
阅读全文
摘要:解析: ,以上图的示例1为例,三角形 有 4 行。行号 0,1,2,3 ;最后一行每个数(4,1,8,3) 到三角形底部的路径就是其自身的值。 1. 定义状态 dp[i][j] 表示 元素 triangle[i][j] 到三角形底部的路径。 2. 状态转移方程 :dp[i][j] = min(dp[
阅读全文
摘要:解析:使用 单调栈 + 哨兵的思想 解决,具体思路可参考 liweiwei 题解:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/solution/bao-li-jie-fa-zhan-by-liweiwei1419/
阅读全文
摘要:关于排序算法的考察,需重点掌握 快速排序 、归并排序 、 堆排序 。 1. 快速排序 1.1 快速排序算法的思想与实现 快速排序的重点是要掌握其划分的思想,划分算法需要先挑选一个 元素作为 pivot。在划分执行完之后, pivot左边的元素都小于等于它,右边的元素都大于等于它,pivot 的位置就
阅读全文
摘要:题目描述: 某种二叉树的节点包含指向 左子树、右子树、父节点的 3 个指针,给定该二叉树中的某个节点 , 返回它的中序遍历的下一个节点的指针。 分析: 节点(设为x) 中序遍历的下一个节点有以下可能: 1. 若x有右子树。则x的下一个节点为x右子树最左侧节点。如,2的下一个节点为8。 2. 若x没有
阅读全文
摘要:具体可参考 https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/solution/bao-li-jie-fa-fen-zhi-si-xiang-shu-zhuang-shu-zu-b/ 代码如下: 1 class Solut
阅读全文
摘要:解析:参考 LeetCode 评论区 liweiwei1419 大神的题解 https://leetcode-cn.com/problems/maximum-product-subarray/solution/dong-tai-gui-hua-li-jie-wu-hou-xiao-xing-by-l
阅读全文
摘要:题目描述: 解析: 参考 VV大神 的题解: https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/dong-tai-gui-hua-er-fen-cha-zhao-tan-xin-suan-fa-p/ 方法
阅读全文
摘要:题目描述: 思路: 对上图示例 2,设置两个指针 A_ptr 和 B_ptr ,让A_ptr 初始 指向链表headA头部 (结点 0), B_ptr初始指向链表headB头部(结点3), A_ptr 和 B_ptr同步地向后移动,A_ptr 到结点 0 所在链表尾部后,跳到headB头部(结点 3
阅读全文
摘要:题目描述: 代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 class Solution { 4 public: 5 bool exist(vector<vector<char>>& board, string word) 6 { 7
阅读全文
摘要:题目描述: 解析: 此类题目 回溯法 相关的题型:排列、组合、子集相关问题 回溯相关问题 可参考 : https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-
阅读全文
摘要:题目描述: 思路: 1. 先把整个字符串翻转; 2. 然后再将字符串中的每个单词往前移同时对每个单词再做翻转,每个单词之间留出一个空格。 3. 在步骤 2 完成之后,原字符串中多余的空格会全部在字符串尾部,再将字符串尾部多余的空格 全部删除即可; 代码: 1 #include <bits/stdc+
阅读全文
摘要:题目描述: 思路: 对两个数字字符串从字符串的最后一位(数字的最低位)相加,统计进位情况,具体实现如下所示: 代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 class Solution { 5 public: 6 string a
阅读全文
摘要:题目描述: 代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 class Solution { 4 public: 5 bool isBalanced(TreeNode* root) 6 { 7 int h = 0; 8 return i
阅读全文
摘要:题目描述: 代码: 1 class Solution { 2 public: 3 bool isValidSudoku(vector<vector<char>>& board) 4 { 5 unordered_map<int,unordered_set<char>> r_memo;//某行的所有元素
阅读全文
摘要:题目描述: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 1. 每行的元素从左到右升序排列。2. 每列的元素从上到下升序排列 思路: 根据 搜索的矩阵 matrix 特性,可以将 target 和矩阵的右上角元素 比较。 1. 要是相
阅读全文
摘要:题目描述: 求一个整数 x 的平方根,返回整数,结果是小数 ,就向下取整。 思路: x的平方根 一定在 [1,x ] 区间内,使用二分查找,在 O(log x) 时间就可找到。 代码如下所示。 1 class Solution { 2 public: 3 //二分法 Time O(log x) 空间
阅读全文

浙公网安备 33010602011771号