股票的买卖问题就是在已知股价波动情况和其它一些限制条件的前提下,合理地安排买卖的时间点来获取最高的利润,基本上都是通过贪心算法和动态规划来解决。下面结合具体的题目进行分析。 LeetCode121 股票买卖时机问题1 题目链接: https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 题目描述: 给定一个数组代表每天的股价,在只...
股票的买卖问题就是在已知股价波动情况和其它一些限制条件的前提下,合理地安排买卖的时间点来获取最高的利润,基本上都是通过贪心算法和动态规划来解决。下面结合具体的题目进行分析。 LeetCode121 股票买卖时机问题1 题目链接: https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 题目描述: 给定一个数组代表每天的股价,在只...
当需要遍历数组或者字符串并从中找出满足条件的子集或者子串的时候,简单的方法就是使用嵌套的循环来实现,但是这样的实现通常时间复杂度会太高,此时就可也考虑使用双指针来对算法进行优化。双指针顾名思义,就是需要应用到、两个指针,一个指针在前一个指针在后,通过移动这两个指针来找到满足条件的解。 LeetCode15 题目链接: https://leetcode.com/problems/3sum/ 题目描述...
滑动窗口通常应用在从字符串中寻找满足条件的子串一类的题目中,是上文中双指针算法的一种特殊形式。滑动窗口算法的关键是需要一个数组来记录下当前窗口中每个字符的数目,然后再根据具体的条件来移动窗口前后的指针。 LeetCode3 题目链接: https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目描述...
前面我们了解了深度优先算法,在遍历一棵树的时候会深入地遍历完树的一个分支后才会去遍历其它的分支。而广度优先算法则是从根节点开始一层一层的进行遍历,只有完全遍历完一层所有的节点后才会进入下一层的遍历。广度优先算法的一般套路如下: 创建一个队列并将根将节点插入到个队列中,此时根节点作为第一层,总共有一个节点。 在每层遍历开始前,队列的长度就是这一层的节点总数,我们记录下这个数目然后不断地将节点出队进行...
前言: 如题,很多粉丝私信,让分享一些算法面试题,今天他来了;精选29道Java经典算法面试题,并且做了详细的讲解,希望能够帮助到大家! Java经典算法题 1. Java 的 16 进制与字符串的相互转换函数 /** * 将指定 byte 数组以 16 进制的形式打印到控制台 * @param hint String * @param b byte[] * @return ...
归并排序是分治法的一种应用,其思路是将数组分为左右两部分,分别递归地进行归并排序,然后将这两部分给合并起来。归并排序的c++递归实现可以参考下面的模板: int mergeSort(iterator l, iterator r) { if (r - l <= 1) return; iterator m = l + (r - l) / 2; int count ...
深度优先算法多数是应用在树上,一个比较典型的应用就是二叉树的中序遍历。所谓树的前、中、后序遍历都是以树的根节点为准的,如下图所示的二叉树中序遍历的结果就是 4,2,5,1,6,3,7。下面我们来看一下 LeetCode 中的二叉树中序遍历的题目。 LeetCode94 题目链接: https://leetcode.com/problems/binary-tree-inorder-traversal...
回溯法是一种通过暴力穷举的方式解决问题的方式,是深度优先搜索的一种具体应用。其思路不难理解,想象一下你在走一个迷宫,当在一个路口有A, B, C 三条岔路的时候你要怎么办呢? 大家可以很容易地想到先尝试道路A, 如果走不通就回到这个路口尝试道路B,如果还走不通就尝试道路C,这就是一个典型地应用回溯法的例子。如果将目光着眼于整个迷宫,就可以发现这个迷宫其实就是一颗多叉树,每个路口就是一个节点,每个路...
在LeetCode的题目讨论中,经常会有些大神将某一类的题目结题思路给整理了出来,感觉受益匪浅。受之启发,萌生了自己也总结一下常见算法的解题思路的想法,希望可以让自己在这个总结的过程中可也融汇贯通这些思路,同时可以给后来者以启发。 从哪里开始好呢?就从经典的二分查找法开始吧,这个算法几乎所有学过计算机的人都知道,而且我在之前的面试中不止一次碰到过这个算法以及这个算法的变种。 二分查找法的思路就是通...