11 2020 档案

摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left 阅读全文
posted @ 2020-11-27 00:22 谁在写西加加 阅读(106) 评论(0) 推荐(0)
摘要:题目描述: 103. 二叉树的锯齿形层次遍历 分析: 本题考察的是二叉树的层次遍历思想。二叉树的层次遍历需要借助一个队列辅助 。算法框架如下: 1 void levelOrderTraverse(TreeNode* root) 2 { 3 queue<TreeNode*> q; 4 //初始状态,先 阅读全文
posted @ 2020-11-23 01:50 谁在写西加加 阅读(113) 评论(0) 推荐(0)
摘要:题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 分析: 二叉树的题目优先考虑递归解法。设计的递归函数完成两个功能: 1. 求当前二叉树的高度 depth; 这里二叉树的高度指的是二叉树的最 阅读全文
posted @ 2020-11-22 01:51 谁在写西加加 阅读(119) 评论(0) 推荐(0)
摘要:题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 方法1: 总体思路: 同时遍历 num1 和nums2 ,比较num1和nums2中当前 阅读全文
posted @ 2020-11-21 22:32 谁在写西加加 阅读(126) 评论(0) 推荐(0)
摘要:题目描述: 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。要求空间 O( 1 ) 分析: 要求空间 O(1) 意味着必须在给定的 矩阵内通过交换元素的方式原地旋转矩阵。 第一步:分层 总体思路就是 对矩阵从外到内分层(如下图),从最外层环到最内层环逐层旋转。比如 5*5 阅读全文
posted @ 2020-11-18 00:05 谁在写西加加 阅读(208) 评论(0) 推荐(0)
摘要:题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入:s = "226"输出:3解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 阅读全文
posted @ 2020-11-17 20:23 谁在写西加加 阅读(168) 评论(0) 推荐(0)
摘要:题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? 请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 思路分析: 排序 + 双指针 ,本题考察的重难点在于如何去除重复解。算法流程如下 阅读全文
posted @ 2020-11-17 00:45 谁在写西加加 阅读(125) 评论(0) 推荐(0)
摘要:参考 [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间 阅读全文
posted @ 2020-11-17 00:24 谁在写西加加 阅读(71) 评论(0) 推荐(0)
摘要:题目描述: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。 这条路径可能穿过也可能不穿过根结点。 分析: 本题和 124. 二叉树中的最大路径和 是一样的思想 ,124 题是在二叉树中 求一条路径 使得这条路径上的 节点和最大。本题是在二叉树树中找一条 阅读全文
posted @ 2020-11-17 00:21 谁在写西加加 阅读(121) 评论(0) 推荐(0)
摘要:题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 1. 定义状态 经典动态规划问题,定义 dp[i] : nums中以nums[i] 结尾的具有最大和的连续子数组。取dp[i] ( 0=< i < n)的 最大值即可得到最终结果。 2 阅读全文
posted @ 2020-11-17 00:08 谁在写西加加 阅读(87) 评论(0) 推荐(0)
摘要:翻转单链表是出现在 各大公司 的面试中频率最高的一题了!!! 有 头插法 和 递归法 两种实现方法,一次性写出 bug free 的代码不是件容易的事! 具体看下面的代码和注释 如下: 1 /** 2 * Definition for singly-linked list. 3 * struct L 阅读全文
posted @ 2020-11-14 23:21 谁在写西加加 阅读(112) 评论(0) 推荐(0)
摘要:题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 写二叉树相关的算法,简单说就是,先搞清楚当前 root 节点该做什么,然后根据函数定义递归调用子节点, 递归调用会让左右孩子节点做相同的事情。 写递归算法的关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导最终结果 阅读全文
posted @ 2020-11-14 16:40 谁在写西加加 阅读(117) 评论(0) 推荐(0)
摘要:本题是一道细节题,很烦人,但是却频繁出现在 微软等大公司的面试中。 主要考察面试者是否具有良好的代码风格和代码调试能力。这里使用了 stringstream + getline 分割字符串,使用 atoi将字符串转成整数。主要的坑也来自这两块。坑1 : atoi("1e1") 返回的结果 是1 不是 阅读全文
posted @ 2020-11-13 16:22 谁在写西加加 阅读(154) 评论(0) 推荐(0)
摘要:LeetCode 215. 数组中的第K个最大元素 描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个 最大的元素,而不是第 k 个不同的元素。 方法 0 : 直接 std::sort 排序 时间O(n*logn) 空间O(1) 求 数组中的第K个最大元素 直 阅读全文
posted @ 2020-11-12 18:08 谁在写西加加 阅读(198) 评论(0) 推荐(0)
摘要:搬运 博主 lambdadong 的博客: labuladong 的算法小抄 回溯算法的框架: 1 result = [] 2 def backtrack(路径, 选择列表): 3 if 满足结束条件: 4 result.add(路径) 5 return 6 7 # 做选择 8 将 选择i 从选择列 阅读全文
posted @ 2020-11-11 20:02 谁在写西加加 阅读(92) 评论(0) 推荐(0)
摘要:LeetCode 「打家劫舍」系列问题共有三道: 198.打家劫舍 213.打家劫舍II 337.打家劫舍III House Robber I int rob(vector<int>& nums); 建模:给定数组 nums中都是正整数,nums中相邻的数不能同时取,制定一种取数策略, 使得取到的n 阅读全文
posted @ 2020-11-09 19:17 谁在写西加加 阅读(282) 评论(0) 推荐(0)
摘要:《滑动窗口防滑记》 labuladong 滑动窗口老猛男,子串问题全靠他。 左右指针滑窗口,一前一后齐头进。 上面的打油诗节选自一个我很喜欢的博主东哥,生动凝练地概括了滑动窗口算法的精髓, 本文介绍的很棒的滑动窗口框架就是来自这位老哥的一篇公众号文章。 推荐给大家:https://mp.weixin 阅读全文
posted @ 2020-11-07 00:05 谁在写西加加 阅读(138) 评论(0) 推荐(0)
摘要:一、寻找排序数组中的一个数(基本的二分搜索),如果存在,返回其索引,否则返回 -1。 1 int binary_search(vector<int>& nums, int target) 2 { 3 if(nums.empty()) return -1; 4 int low = 0; 5 int h 阅读全文
posted @ 2020-11-05 19:07 谁在写西加加 阅读(133) 评论(0) 推荐(0)
摘要:概述: 快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前(一次走两步), 慢指针 slow 在后(一次走一步)。 1. 判断单链表是否有环,并找到环的入口节点。 分析:如果单链表没有环,一定是快指针先走到链表结尾停下,如果链表有环,快慢指针会 不停地走下去,这样判断是否有 阅读全文
posted @ 2020-11-05 11:47 谁在写西加加 阅读(127) 评论(0) 推荐(0)
摘要:题目是这样:你面前有一栋从 1 到 N 共 N 层的楼,然后给你 K 个鸡蛋(K 至少为 1)。 现在确定这栋楼存在楼层 0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎 (高于 F 的楼层都会碎,低于 F 的楼层都不会碎)。现在问你,最坏情况下,你至少 要扔几次鸡蛋,才能确定这个楼层  阅读全文
posted @ 2020-11-03 20:32 谁在写西加加 阅读(195) 评论(0) 推荐(0)
摘要:解决两个字符串的动态规划问题,一般都是用两个指针 i,j 分别指向两个字符串的最后,然后一步步往前走, 缩小问题的规模。 1. 最长公共子序列:求两个字符串的最长公共子序列,代码如下: 1 class Solution { 2 public: 3 int longestCommonSubsequen 阅读全文
posted @ 2020-11-03 00:36 谁在写西加加 阅读(121) 评论(0) 推荐(0)
摘要:方法一: 动态规划 时间:O(n*n) 空间 :O(n) 动态规划的核心设计思想是数学归纳法。 数学归纳法思想: 比如我们想证明一个数学结论,那么我们先假设这个结论在 k<n 时成立,然后根据这个假设, 想办法推导证明出 k=n 的时候此结论也成立。如果能够证明出来,那么就说明这个结论对于 k 等于 阅读全文
posted @ 2020-11-02 16:48 谁在写西加加 阅读(175) 评论(0) 推荐(0)