随笔分类 - 算法
摘要:思路:把数组当成有序和无须两部分,将无须部分的元素与有序部分的元素逐个比较,并且插入到正确的位置,直到无须部分没有元素。 步骤: 1.遍历整个数组所有元素,从第二个元素开始遍历,假设第一个元素自身就是有序的。 2.有序部分后的第一个元素,为无须部分的第一个元素。遍历无须部分的元素,根据部分3插入到有
阅读全文
摘要:归并排序的步骤如下: 思想:将数组分成两部分,两部分都是有序的时候,把两个数组合并。合并的方法就是双指针,i 指向左边的数组,j 指向右边的数组,比较 L[i] 和 R[j] 的大小,将其填入原数组,并且将 i 或 j 往后移。 步骤: 1.将数组分成两部分,直到其中只包含一个元素 2.当数组只包含
阅读全文
摘要:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "ab
阅读全文
摘要:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。 你可以通过调用 bool
阅读全文
摘要:给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2)
阅读全文
摘要:思想: 1.填坑和划分 以某个数为基准,一般选第一个数,从数组头尾两边开始遍历。 选出来的基准数会用一个变量保存,这样的话,这个基准数所在的数组的位置就相当于有个坑。 先从尾那边开始,找到比基准数小的,就放到左边的坑。放了之后左边的坑就填上了,右边就出现坑了。 然后又从头那边开始,找到比基准数大的,
阅读全文