摘要:https://github.com/imhuay/Algorithm_Interview_Notes-Chinese
阅读全文
随笔分类 - 算法
记录每一道算法题
摘要:题目: 思路一: 动态规划。创建一个mxn的二维数组,数组内存储到达每个点的路径数量N。动态规划推导式,N(i,j) = N(i-1, j) + N(i, j-1)。 思路二: 从左上角出发,终点是右下角,每次只能向右走(R)或者向下走(D)。总共需要向右移动 n-1 次,向下移动 m-1 次,一共
阅读全文
摘要:字符串比较大小 https://blog.csdn.net/jason_cuijiahui/article/details/79038468 http://www.cplusplus.com/reference/string/string/compare/ https://blog.csdn.net
阅读全文
摘要:题目: 在排序数组中查找元素(包含重复元素)的第一个和最后一个位置。 二分法的思想非常简单,然而其中的实现细节非常繁琐,容易出错。本推文非常详细地介绍二分法的实现细节。 总结几点注意事项: 初始上、下界的取值; 判断语句不要出现 else ,全部展开成 else if 方便理解; 注意搜索区间和 w
阅读全文
摘要:题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 思路: 采用贪心算法,如果当天股票的价格 pi 大于等于前一天的
阅读全文
摘要:题目: 给定一个二叉树,找出其最小深度。 注意最小深度的定义! 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 一、递归法 时间复杂度:O(n)。需要遍历每一个节点。 空间复杂度:最差情况下,当一棵树是非平衡树的时候,例如每个节点都只有一个孩子,树的
阅读全文
摘要:题目: 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 思路:采用宽度优先搜索。 时间复杂度:O(n)。n为节点的数量,遍历所有节点。 空间复杂度:O(n)。创建一个vector容器存储所有节点值。
阅读全文
摘要:问题: 爬n阶楼梯,每次只能走1阶或者2阶,计算有多少种走法。 暴力计算+记忆化递归。 从位置 i 出发,每次走1阶或者2阶台阶,记录从位置 i 出发到目标 n 所有的走法数量,memoA[i] 。记录的数据可以重复使用,避免冗余计算。 时间复杂度:O(n)。每次计算从 i 位置出发到终点 n 的走
阅读全文
摘要:关于C++各类排序算法与std::sort性能的比较 https://blog.csdn.net/qq_24625045/article/details/49964173 堆排序 堆排序分为初始构建堆和重建堆两部分内容。 构建堆。 从顺序表构建堆,时间复杂度O(n)。每个非终端节点最多进行2次比较和
阅读全文
摘要:题目: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 分析思路: 首先肯定是暴力求解法,找到一个可行解。然后进一步对暴力求解法进行优化。 暴力求解法通过两个循环遍历,找到所有子序,比较所有子序和得到最大子序和。暴力解法存在很多冗余的计算。当s
阅读全文
摘要:参考资料: 题目: https://blog.csdn.net/dongtinghong/article/details/78657403 符号重载: https://blog.csdn.net/cdlwhm1217096231/article/details/89326480#commentBox
阅读全文
摘要:递归法 执行用时 :12 ms, 在所有 C++ 提交中击败了43.44%的用户 内存消耗 :14.6 MB, 在所有 C++ 提交中击败了95.56%的用户 时间复杂度: O(n),因为算法过程要遍历树的每一个节点,节点数量为n。 空间复杂度: O(n),递归函数使用的栈空间与树的层数有关。如果树
阅读全文
摘要:解题方案:位操作的技巧 整数 n 和 n-1(n>0) 做与运算,从其二进制形式来看,可以消掉 n 的二进制数值中最后1个 “1” 。循环进行,每次消掉1个 “1” 。整数 n 的二进制数值中有多少个 “1” ,就需要进行多少次循环。 执行用时 :4 ms, 在所有 C++ 提交中击败了83.46%
阅读全文
摘要:注: 1) 2的幂函数,其y值大于0; 2) 2的幂函数,若 x < 0, y = (0,1); 2)n&(n-1) == 0 和 (n&(n-1)) == 0 ,逻辑是不一样的。
阅读全文
摘要:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 采用基于递归的深度搜索算法。 深度搜索:首先找出所有从根节点到叶子节点的路径,再比较最小深度。 递归:需要定义递归函数。 复杂度分析: 时间复杂度:节点个数为N。每个节点访问一次,O(n). 空间复杂度:最坏
阅读全文
摘要:题目描述: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 注意: 1)空指针NULL,null是错误的; 2)空间复杂度是O(m+n),因为一共进行 m+n 次递归调用,产生了 m+n 个栈帧。
阅读全文
摘要:参考该文章 https://www.cnblogs.com/henuliulei/p/10041737.html
阅读全文
摘要:解题思路: 1. 首先在两个字符串前面补‘0’,使它们等长。否则要一直监督操作是否超出两个字符串的索引。 2. 从后向前遍历所有位数,同位相加。字符相加,利用ASCII码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’ - ‘0’ = 0, ‘0’ + 1 = ‘1’,以此类推。字符
阅读全文
摘要:题解参考:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/ 复杂度分析 时间复杂度:O(log(x)),x中大约有 log10(x) 位数字。空间复杂度:O(1)。 本
阅读全文
摘要:启发 1)做题前一定要读懂题目 在本题中,首先要清楚地定义回文子串的概念,然后才能设计算法查找它。 如中心扩散法,其主要思想在于找到一个回文子串的定义——两侧互为镜像。进一步分为奇数长度和偶数长度进行讨论。 在这里附上kaggle宗师高志峰的心得, 2)查找的过程要非常注意边界的处理 这往往是非常容
阅读全文

浙公网安备 33010602011771号