随笔分类 - 算法实战
Learn by practice!
摘要:通过有序线性结构构造AVL树 本博客旨在结局利用有序数组和有序链表构造**平衡二叉树(下文使用AVL树代指)**问题。 直接通过旋转来构造AVL树似乎是一个不错的选择,但是稍加分析就会发现,这样平白无故做了许多毫无意义的旋转。因为直接通过旋转调整**二叉查找树(下文使用BST代指)**并没有利用数组
阅读全文
摘要:模拟法与螺旋矩阵 模拟法,就像其字面意思一样,使用计算机程序去模拟一个实际的过程。其实常见的模拟法不涉及到任何具体的算法,它只需要你的代码按照实际过程去运行。使用模拟法最重要的地方在于要分清模拟的各个过程,将一个过程分解为多个过程——方便我们去模拟,否则等着你的可能是极其复杂的边界检测。 54. 螺
阅读全文
摘要:减治思想——二分查找详细总结 二分查找应用于有序数组,可以在以时间复杂度进行查找。其思想在于利用数组的有序性直接排除掉一些元素,这也是进行“减治”的地方。二分查找思想看起来简单,但是其边界条件其实很容易弄混,下面就对各种情况的二分查找(基础情形、左边界二分查找、右边界二分查找
阅读全文
摘要:滑动窗口法——Leetcode例题(连更未完结) 1. 方法简介 滑动窗口法可以理解为一种特殊的双指针法,通常用来解决数组和字符串连续几个元素满足特殊性质问题(对于字符串来说就是子串)。滑动窗口法的显著特征是:两个指针同方向运动,且往往要对窗口内每个元素都加以处理。 滑动窗口法(以鄙人目前的程度)来
阅读全文
摘要:Leetcode26——删除有序数组中的重复项(双指针法) 1. 题目简述 给你一个升序排列的数组 nums ,请你原地 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序 应该保持一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分
阅读全文
摘要:Leetcode1——两数之和 题目分类:数组、哈希表的应用 1. 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复
阅读全文
摘要:剑指Offer9——使用双栈模拟队列 队列Queue是具有FIFO(First in First out)特性的数据结构,栈Stack是具有LIFO(后进先出)特性的数据结构。下面提供一种思路使用双栈来模拟队列。 1. 思路——为何需要用两个栈? 很显然一个普通的栈是无法替代队列的,这是因为先进栈的
阅读全文
摘要:剑指Offer30——包含min函数的栈 1. 题目简述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min、push及pop的时间复杂度是O(1)。 2. 题目分析 一个普通的栈push及pop操作时间复杂度均为O(1),但寻找最小元素的复杂度则为O(n)。
阅读全文