摘要:给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。 阅读全文
posted @ 2020-05-30 00:08 gzshan 阅读(91) 评论(0) 推荐(0) 编辑
摘要:子数组和的问题可以通过前缀和解决,而关于子数组的第二类题目往往会涉及到一些最值问题,比如最大子数组和、最长子数组、乘积最大子数组等等,根据我们的算法积累经验,这类求最值的问题,往往会用到动态规划的思路。因为寻找满足一个最值条件的子数组就相当于一个多阶段的决策过程最优化问题,这里的决策就是如何选取子数组的起点和终点,最优化可以通过dp的思路进行记忆化搜索。 阅读全文
posted @ 2020-05-29 15:32 gzshan 阅读(382) 评论(0) 推荐(1) 编辑
摘要:连续子数组问题是算法中经常可以见到的一类题目,通过几个典型的题目分析,可以发现这类题目主要分为两大类,其解题思路通过最简单的子串枚举(枚举所有的子串起点和终点)来暴力解决大都不难,但是如果考虑到对空间和时间的要求,其解答就需要一定的算法技巧。 阅读全文
posted @ 2020-05-28 11:38 gzshan 阅读(219) 评论(0) 推荐(0) 编辑
摘要:两数相加是一个简单的数学问题,但由于在编程中,数字可以用字符串、数组、链表、二进制等不同的形式进行存储,因此衍生出了各种各样的算法题目,整体相对简单,思想也基本类似,这里进行一个系列整理。 阅读全文
posted @ 2020-05-12 18:09 gzshan 阅读(101) 评论(0) 推荐(0) 编辑
摘要:本文在上文三种简单排序算法的基础上,继续介绍了三种经典高效的排序算法,分别是快速排序、归并排序、堆排序,这三种算法的时间复杂度都是O(nlogn),是必须掌握的经典算法。 阅读全文
posted @ 2020-04-23 14:05 gzshan 阅读(252) 评论(0) 推荐(0) 编辑
摘要:本文介绍最为简单的三种排序算法,其时间复杂度都为O(n^2),效率较低,但是其基本思想和实现是需要掌握的,分别是:直接插入排序、直接选择排序、冒泡排序。 阅读全文
posted @ 2020-04-23 11:55 gzshan 阅读(123) 评论(0) 推荐(0) 编辑
摘要:二叉树的深度优先遍历是二叉树题目中最基本的算法,很多算法都基于深度优先遍历进行变形,其中递归解法相对很简单,特别是对非递归的迭代方法,基于栈是基础,要着重理解。 阅读全文
posted @ 2020-04-04 21:13 gzshan 阅读(181) 评论(0) 推荐(0) 编辑
摘要:本文总结了四道关于二叉树路径和的相关问题,其中最主要的是二叉树前序深度遍历和递归算法的应用,要注意回溯思想及相关算法思想的应用。给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 阅读全文
posted @ 2020-04-03 22:10 gzshan 阅读(170) 评论(0) 推荐(0) 编辑
摘要:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?本题依旧是对BST性质的一个变形应用,从1到n我们可以首先选择其中某一个值作为根,比如i,那么从1到i-1就可以构建成为左子树,而从i+1到n就可以构建右子树,而总共可以构建的BST的总数是左右子树数量的乘积,这就是典型的子问题,可以用递归来解决。 阅读全文
posted @ 2020-04-02 17:32 gzshan 阅读(164) 评论(0) 推荐(0) 编辑
摘要:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。 阅读全文
posted @ 2020-04-01 22:20 gzshan 阅读(164) 评论(0) 推荐(0) 编辑
摘要:本文记录求解二叉树深度的方法及其衍生的相关问题,包括二叉树最小深度,直径、平衡二叉树,其中主要以递归为主要实现方法,关键是考虑对根结点做哪些操作,然后左右子树就构成两个相同的递归子问题。 阅读全文
posted @ 2020-03-27 17:06 gzshan 阅读(87) 评论(0) 推荐(0) 编辑
摘要:有序旋转数组是指将有序数组向左或者向右移动k个位置得到的结果,其查找算法不难理解,因为局部有序,因此很容易想到二分查找是最合适的方法,时间复杂度O(nlogn),本文总结四道相关的算法题目。重点是二分查找算法的变形应用,是一个重要的算法知识点。 阅读全文
posted @ 2020-03-25 21:06 gzshan 阅读(194) 评论(0) 推荐(0) 编辑
摘要:运用你所掌握的数据结构,设计和实现一个 LRU (Least Recently Used,最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put ,时间复杂度要求为O(1)。使用哈希表和双向链表两个数据结构来实现。其中哈希表主要用来保存键值对对应关系,而数据是否最近被使用过用一个双向链表来记录, 阅读全文
posted @ 2020-03-25 17:38 gzshan 阅读(87) 评论(0) 推荐(0) 编辑
摘要:给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。类似题目:给定⼀个字符串,得到它字典序最⼤的⼦序列。(换言之,也就是删除⼀些字符,使得剩下的字符构成的字符串字典序是最⼤的)。 阅读全文
posted @ 2020-03-24 18:05 gzshan 阅读(226) 评论(0) 推荐(0) 编辑
摘要:本文记录了关于排列的三道算法题目,相对来说有一定的难度,特别是求下一个排列和全排列中交换递归的算法思想,可以把其作为一个相对固定的思路理解记忆,同时,我们也看到了回溯和递归思想在其中的应用。 阅读全文
posted @ 2020-03-23 16:14 gzshan 阅读(219) 评论(0) 推荐(0) 编辑