240 发简信
IP属地:江苏
  • 120
    随机选择算法

    求无序数组中第k大的数,如果我们先将数组排序,然后再得到第k大的数,就前面所学的排序算法而言,最好的时间复杂度也是O(n*logn)。我们可以借助快速排序的划分方法,实现一个...

  • 120
    随机快速排序

    快速排序原理 对于一个数组,选择数组中一个随机元素x做划分,将<=x的放到x的左边,将>x的放到x的右边,此时x所在的位置一定是最后排完序后x的最终位置。然后我们对x左边的数...

  • 120
    归并分治

    先来看一个题目 这个题目的暴力解法很容易想,每次遍历当前数左边的数,如果小于等于当前数,则加入到小和中。暴力解法是时间复杂度为O(n )。 而如果我们使用归并分治的方法,可以...

  • 120
    归并排序

    原理 归并排序是通过将一个大数组不断划分为小数组,使小数组内部有序,然后再将有序的小数组合并为一个有序的大数组。 递归实现 每次从中点将数组划分为两个小数组,两个小数组需内部...

  • 120
    递归和master公式

    递归是如何实现的 举例来说,比如我们希望求一个数组中的最大值,使用如下递归的方法 每次将数组对半划分,求出对半划分两部分的最大值,取其中较大者返回 递归就是通过系统栈来实现的...

  • 120
    算法笔试中输入和输出的处理

    填函数风格 在leetcode做题时,我们碰到的就是填函数风格的题目,比如 这种风格的题目中,通常类名以及函数名都会给出,且不可修改,我们只需要将函数的逻辑完成,且返回答案即...

  • 二叉树的三种遍历的非递归实现及其时间复杂度

    递归的函数调用就是通过栈来实现的,因此二叉树的非递归实现也可借助栈来完成 先序遍历 要按照根-左-右的顺序遍历,我们先将头结点压入栈中,只要栈不为空,就弹出一个结点并打印,然...

  • 120
    二叉树及其三种遍历的递归实现

    二叉树定义 类比于链表的结点,二叉树的每个结点都有一个数据域,一个指向左孩子的指针和一个指向右孩子的指针。这样结点构成的集合就是一颗二叉树 二叉树的先序、中序、后序遍历 先序...

  • 120
    双端循环队列

    题目描述 双向链表实现 由于双端队列的操作都在队头和队尾进行,因此可以使用双向链表,对头结点和尾结点进行操作。 数组实现 也可通过数组来实现,定义一个size变量来限制队列中...

  • 120
    最小栈

    题目描述 如果我们每次获取最小元素都去遍历栈的话,时间复杂度会到O(n),因此可以通过两个栈来实现O(1)复杂度的操作。 算法思路 定义一个数据栈data和一个最小元素栈mi...

  • 120
    栈和队列的相互实现

    用栈来实现队列 算法思路 我们可以使用一个in栈和一个out栈来实现,初始入队时,把入队元素均加入in栈;当需要出队时,我们将in栈中的所有元素顺序弹出,再加入到out栈中,...

  • 120
    队列和栈—数组、链表实现

    队列的定义以及实现 队列是一种先进先出的数据结构,新加入的元素放到队尾,从队头进行出队 由于队列的操作基本都在队头和队尾,因此我们可以使用带头指针和尾指针的链表来实现一个队列...

  • 120
    划分链表

    题目与示例 算法思路 原链表顺序遍历,将大于等于x的结点链接为一个链表,小于x的结点链接为一个链表,最后再将两个链表链接起来。 代码实现

  • 120
    两数相加(链表)

    题目与事例 算法思路 模拟列竖式进行加法的方法,相同的位进行相加,满十进一。 代码实现 ans表示最后结果的头结点;cur1与cur2指向两个数的每一位,进行逐位相加;cur...

  • 合并两个有序链表

    算法思路:新建一个头结点,采用双指针,从两个有序链表的头部向后遍历,谁小谁链到头结点之后,不断往后移动。代码实现:

  • 120
    单双链表及其反转

    单双链表的定义 单链表 在内存中定义一种数据结构,其由一个个结点链接而成,每个结点包含本结点的值和指向下一个结点的指针 代码实现: 双链表 与单链表类似,只不过多了一个指向前...

  • 时间复杂度与空间复杂度

    时间复杂度 一个和数据量有关,只要高阶项,不要低阶项,不要常数项的操作次数表达式(类似于求当n趋向于∞时,该多项式等价于什么) 三种排序算法的时间复杂度 选择排序 从选择排序...

  • 120
    二分搜索及应用

    二分搜索方法的实现 二分搜索是一种常用的搜索方法,它要求数组中的元素必须是有序存放的,二分搜索方法首先将关键字与位于数组中央的元素进行比较。比较结果有三种情况:1.如果关键字...

  • 120
    对数器-验证的重要手段

    使用场景 当我们面临无法找到测试用例,去验证我们的算法是否正确,或者失败的测试用例的数据量过于巨大,以至于我们无法确定算法的哪一步出了问题,这个时候就可以用到对数器。 对数器...

  • 三种排序算法

    三种排序算法都需要进行数组元素的交换,因此我们先实现一个交换方法 选择排序 i ~ n-1的范围上,找到最小值并放在i位置,然后在i+1 ~ n-1范围上继续。 冒泡排序 在...