随笔分类 -  数据结构

摘要:最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。 一、最长连续公共子串 题目: 找出两个字符串的最长连续公共子串例: abccade 和 dgcadde ==> cad思路:动态规划 考虑两种情况: M[i+1] 阅读全文
posted @ 2019-11-07 19:45 nxf_rabbit75 阅读(359) 评论(0) 推荐(0) 编辑
摘要:(一)字符串 1、子串:串中任意个连续的字符组成的子序列称为该串的子串备注:空串属于子串 2、串中字符均不相同:n个字符构成的字符串,假设每个字符都不一样,问有多少个子串 答案:n(n+1)/2+1 提示:每个字符均不相同解析:包含1个字符的子串共n个包含2个字符的子串共n-1个包含3个字符的子串共 阅读全文
posted @ 2019-11-07 19:44 nxf_rabbit75 阅读(403) 评论(0) 推荐(0) 编辑
摘要:一、深度遍历 1.员工的重要性 leetcode 690 思路:深度遍历 """ # Employee info class Employee: def __init__(self, id, importance, subordinates): # It's the unique id of eac 阅读全文
posted @ 2019-10-15 10:47 nxf_rabbit75 阅读(442) 评论(0) 推荐(0) 编辑
摘要:一、最大深度 1.二叉树的最大深度 leetcode104 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 阅读全文
posted @ 2019-10-15 10:08 nxf_rabbit75 阅读(2702) 评论(0) 推荐(0) 编辑
摘要:一、数组 VS 二叉树 1.有序数组转换为二叉搜索树 思路:递归 时间复杂度O(N) 空间复杂度O(1) nums为空,return None nums非空,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 class Solution: def 阅读全文
posted @ 2019-10-15 09:40 nxf_rabbit75 阅读(1472) 评论(0) 推荐(0) 编辑
摘要:一、路径 1.二叉树的所有路径 leetcode 257 思路:深度遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None 阅读全文
posted @ 2019-10-15 09:35 nxf_rabbit75 阅读(2455) 评论(0) 推荐(0) 编辑
摘要:一、树的定义 1.定义 树是n(n>=0)个节点的有限集,且这些节点满足如下关系: (1)有且仅有一个节点没有父节点,该节点称为树的根; (2)除根外,其余的每个节点都有且仅有一个父节点; (3)树中的每一个节点都构成一个以它为根的树。 二叉树在满足树的条件时,满足如下条件:每个节点最多有两个孩子( 阅读全文
posted @ 2019-09-09 15:07 nxf_rabbit75 阅读(477) 评论(0) 推荐(0) 编辑
摘要:一、队列 1.队列类型 FIFO:先进先出 LIFO:后进先出(等同于栈) 优先级队列 双端队列:LIFO和FIFO结合,可以从队首和队尾添加和删除元素 循环队列:队首和队尾相连(可用来解决假溢出) 2.Python自带Queue模块【线程不安全,需加锁】 支持三种队列类型: FIFO(queue. 阅读全文
posted @ 2019-08-14 11:42 nxf_rabbit75 阅读(215) 评论(0) 推荐(0) 编辑
摘要:一、堆 1.最小堆 【Python heapq模块】 heap为定义堆,item增加的元素 heapq.heappush(heap,item) 将列表转换为堆 heapq.heapify(list) 删除最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素 heapq.h 阅读全文
posted @ 2019-03-19 19:21 nxf_rabbit75 阅读(487) 评论(0) 推荐(1) 编辑
摘要:一、栈 二、算法 1.括号匹配 Leetcode 20: 有效的括号 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 阅读全文
posted @ 2019-02-18 15:00 nxf_rabbit75 阅读(212) 评论(0) 推荐(0) 编辑
摘要:一、直接插入排序 每次选择一个元素,并且将这个元素和已经排好序的数组的所有元素进行比较,然后插入到合适的位置 举例: 38,65,97,76,13,27,49 [38],65,97,76,13,27,49 [38,65],97,76,13,27,49 [38,65,97],76,13,27,49 [ 阅读全文
posted @ 2019-02-16 21:41 nxf_rabbit75 阅读(445) 评论(0) 推荐(0) 编辑
摘要:问题描述:对于一个有序数组 1. 找到第一个(大于)等于value的位置;(求下界)2. 找到第一个大于value的位置;(求下界)3. 找到最后一个小于(等于)value的位置;(求上界)4. 找到最后一个小于value的位置.(求上界) 问题1:找到第一个(大于)等于value的位置 可以看出来 阅读全文
posted @ 2019-01-20 19:34 nxf_rabbit75 阅读(242) 评论(0) 推荐(0) 编辑
摘要:一、连续数组求和 Leetcode 53 最大子序和 题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 说明:解释: 连续子数组 [4,-1,2,1] 的和最 阅读全文
posted @ 2019-01-20 16:40 nxf_rabbit75 阅读(773) 评论(0) 推荐(0) 编辑
摘要:一、如何找出数组中丢失的数 题目描述:给定一个由n-1个整数组成的未排序的数组序列,其原始都是1到n中的不同的整数,请写出一个寻找数组序列中缺失整数的线性时间算法 方法1:累加求和 时间复杂度是O(N) 方法2:异或法,要先对实际无缺失的arr中的值异或,然后再对估计的值异或;缺失的值就是最终异或得 阅读全文
posted @ 2019-01-16 21:17 nxf_rabbit75 阅读(586) 评论(0) 推荐(0) 编辑
摘要:(一)数组 总结: 利用序:理解二分查找 利用前缀和:查找、计算、排序 理解数组:map 用数组实现高级数据结构:一般树(存每个节点的父亲【并查集】);二叉树(下标从1开始a[i]的儿子是a[i*2]和a[i*2+1])(堆) 简单题:分治法求逆序对数;有序数组归并;两个有序数组的中位数;两头扫的方 阅读全文
posted @ 2019-01-16 10:28 nxf_rabbit75 阅读(518) 评论(0) 推荐(0) 编辑
摘要:一、链表 双指针”法解决链表问题 背景:单链表问题由于顺序遍历的特性,有时候执行一些操作的时候会出现问题看似需要多次遍历才能获取数据。 使用双指针法能在一次遍历中获取更多的数据,也可以节约更多的额外控件。“双指针”就是用一个快指针一个慢指针同时进行单链表的顺序扫描。 如此就可以使用快指针的时间差给慢 阅读全文
posted @ 2018-11-23 16:22 nxf_rabbit75 阅读(253) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示