数据结构与算法
liuluTL
这个作者很懒,什么都没留下…
展开
-
排序与搜索
文章目录排序算法的稳定性一、冒泡排序冒泡排序的分析时间复杂度二、选择排序选择排序分析时间复杂度排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。(4, 1) (3, 1) (3, 7)(5, 6)在这个状况下,有可能产生两种不同的原创 2020-05-18 23:30:22 · 215 阅读 · 0 评论 -
数据结构与算法:才知道字典可以这么用
n ,m = map(int, input().split())money = list(map(int, input().split()))for _ in range(m): a = int(input()) print(money.count(a))现在可以使用字典的方法n ,m = map(int, input().split())money = list...原创 2020-04-11 18:39:25 · 205 阅读 · 0 评论 -
数据结构与算法:斐波那契数列的O(logn)解法
文章目录斐波那契数列的O(logn)解法利用动态规划来做利用矩阵乘法斐波那契数列的O(logn)解法我们都知道斐波那契数列有多种解法,比如糟糕的递归法:O(2^n);利用动态规划的O(n),今天来介绍一种利用矩阵乘法的O(log n)方法利用动态规划来做利用矩阵乘法...转载 2020-04-10 19:49:42 · 713 阅读 · 0 评论 -
数据结构与算法:动态规划
文章目录动态规划一维动态规划1、给定n,找到不同的将n写成1,3,4相加的方法有多少个,顺序不一样算一种2、找到不相邻的加和最大数变形,现在这些银行排成一个圆环该如何做动态规划三大算法:分治法、动态规划与贪婪算法分治法与动态规划的区别:分治法将大问题分成小问题,例如二分法。子问题属性不变,小问题之间互相独立,需要做一个合并的过程(从上到下的方法)动态规划也是将大问题拆解成小问题,不同之处...原创 2020-04-10 19:09:18 · 351 阅读 · 0 评论 -
数据结构与算法:B树与B+树
文章目录B树与B+树B树B树的定义B树的查询B树的插入B树与B+树B树B树的定义一个m阶的B树,就是每一个非叶子节点拥有不超过m个子孩子,也可以定义为非叶子节点最多有m个查找路径(当m=2就是二叉,m=3就是三叉)真实得到数据集存储在叶子节点和非叶子结点上。B树需要符合下面的一些限制:1、从根节点到叶子节点的每一条路径都拥有相同的长度2、如果一个节点拥有n个孩子,那么他就拥有n-1个...原创 2020-04-06 23:30:32 · 369 阅读 · 0 评论 -
数据结构与算法-树(六):剑指offer-二叉树的镜像
文章目录二叉树的镜像题目解析二叉树的镜像题目操作给定的二叉树,将其变换为源二叉树的镜像。解析# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None...原创 2020-03-27 17:06:30 · 147 阅读 · 0 评论 -
数据结构与算法-树(五):剑指offer-从上打印二叉树
文章目录从上打印二叉树题目解析从上打印二叉树题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析用一个临时数组存储需要打印的节点,[8,6,10]# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = ...原创 2020-03-27 16:55:03 · 158 阅读 · 0 评论 -
数据结构与算法-树(四):剑指offer-树的子结构
文章目录树的子结构题目解析树的子结构题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解析本题全程使用递归,因为要遍历树嘛,第一反应就可能需要递归来解决。那怎么解决呢?两点:第一点:A树从上到下遍历,看有没有两棵树的根节点的值相同第二点:如果在某一个位置上,两棵树的根节点值相同,判断这个根节点往下,是否有相同的树结构。注意是先判断有没有...原创 2020-03-27 15:58:58 · 126 阅读 · 0 评论 -
数据结构与算法-树(三):剑指offer-重建二叉树
文章目录重建二叉树一、题目二、解析重建二叉树一、题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二、解析自己想一下不用程序该怎么重建二叉树:首先前序序列中可以找到根节点root=1,这个1是根节点...原创 2020-03-27 10:31:51 · 148 阅读 · 0 评论 -
数据结构与算法-树(二):剑指offer-树的遍历
文章目录树的遍历一、树的结构二、深度优先与广度优先遍历1、先序中序后序遍历的递归实现2、非递归方式实现遍历树的遍历一、树的结构实现树的结构'''值:val两个指针:left,right二叉树中叶子结点的左右节点都为None''''''值:val两个指针:left,right二叉树中叶子结点的左右节点都为None'''class TreeNode(object): ...原创 2020-03-23 20:05:09 · 186 阅读 · 0 评论 -
数据结构与算法-位运算(一):原码、反码与补码详解(转载)
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式...转载 2020-03-22 11:43:22 · 451 阅读 · 0 评论 -
数据结构与算法-链表(九):剑指offer-链表中环的入口节点(快慢指针的应用)
文章目录链表中环的入口节点题目解析链表中环的入口节点题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解析如何判断里面是否有环利用快慢指针,快指针每次走两步,慢指针每次走一步,如果有环的话,那么当快慢指针在环中循环时,肯定有相遇的一天;如果没有环,那么快指针会先走到None。第一步,先判断有没有环第二步,找入口点那如何找入口点呢?fast走的步数与...原创 2020-03-21 21:56:04 · 195 阅读 · 0 评论 -
数据结构与算法-斐波那契相关(三):剑指offer-变态跳台阶
文章目录变态跳台阶题目解析变态跳台阶题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解析f(n)=f(n−1)+f(n−2)+f(n−3)+...+f(1)f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(1)f(n)=f(n−1)+f(n−2)+f(n−3)+...+f(1)f(n−1)=f(n−2)+f...原创 2020-03-21 20:06:55 · 132 阅读 · 0 评论 -
数据结构与算法-斐波那契相关(二):剑指offer-青蛙跳台阶
文章目录青蛙跳台阶题目解答青蛙跳台阶题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解答# -*- coding:utf-8 -*-'''分析: 假设有n级台阶,青蛙从最后的第n级开始往前跳,有可能是跳1级台阶,之后还有n- 1级台阶,也就是f(n-1)中可能性;也有可能跳2级台阶,之后还有n-2级台阶,...原创 2020-03-21 19:55:30 · 190 阅读 · 0 评论 -
数据结构与算法-链表(八):剑指offer-孩子们的游戏
文章目录孩子们的游戏题目思路孩子们的游戏题目每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续...原创 2020-03-21 19:29:34 · 185 阅读 · 0 评论 -
数据结构与算法-链表(七):剑指offer-两个链表的第一个公共节点
文章目录剑指offer-两个链表的第一个公共节点题目什么是公共节点剑指offer-两个链表的第一个公共节点题目输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)什么是公共节点就是两条链表走着走着重合了:如果没有公共节点返回none就可以了...原创 2020-03-21 15:33:22 · 192 阅读 · 0 评论 -
数据结构与算法-链表(六):剑指offer-复杂链表的复制
文章目录复杂链表的复制一、题目二、解析复杂链表的复制一、题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)二、解析需要注意的是每个节点都有两个指针# -*- coding:utf-8 -*-# class Random...原创 2020-03-20 09:29:04 · 134 阅读 · 0 评论 -
数据结构与算法-链表(五):剑指offer-合并两个排序链表
文章目录合并两个排序链表一、题目二、解析合并两个排序链表一、题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二、解析首先有两个链表,合并成新的链表;你要知道一条链表只要知道他的一个头就等于获得了整条链表,因此本题输入输出都是头,输入的是两条旧链的header,输出是新的链的header设置三个指针(如果把新链表的header也当成指针就是...原创 2020-03-19 20:37:03 · 194 阅读 · 0 评论 -
数据结构与算法-链表(四):剑指offer-反转链表
文章目录反转链表一、题目二、解析反转链表一、题目输入一个链表,反转链表后,输出新链表的表头。二、解析定义三个结点left、mid、right,在最开始的时候让left.next指向None然后开始正常的流程right的next指向leftleft 变为midmid变为rightright变为right.next循环结束时间:right为None,此时mid为链表头部,把他...原创 2020-03-19 17:44:32 · 170 阅读 · 0 评论 -
数据结构与算法-链表(三):剑指offer-输出链表中倒数第k个节点(快慢指针的应用)
文章目录输出链表中倒数第k个节点一、题目二、思路2.1 什么是快慢指针2.2 本题可以借用快慢指针来解决2.3 代码输出链表中倒数第k个节点一、题目输入一个链表,输出该链表中倒数第k个节点二、思路2.1 什么是快慢指针快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。2.2 本题可以借用快慢指针来解决可以定...原创 2020-03-19 16:41:30 · 151 阅读 · 0 评论 -
数据结构与算法-链表(二):剑指offer(3)-从尾到头打印链表
文章目录剑指offer(3):从尾打印链表一、链表的结构二、从尾到头打印一个链表剑指offer(3):从尾打印链表题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。一、链表的结构在正式做题之前。我们先来看一下在python中链表是如何实现的:# 这个就是链表的结构,首先这个是固定的,在工作的时候人家就给你了下面这样一个结构,你不能随意改动class ListN...原创 2020-03-18 19:32:41 · 146 阅读 · 0 评论 -
数据结构与算法-链表(一)简介
文章目录链表一、单链表链表的增删改查二、循环链表三、双向链表看一下基本的数据结构链表相比数组,链表是一种稍微复杂一点的数据结构。从底层的存储结构上来看:数组需要一块儿连续的内存空间,堆内存的要求比较高,如果我们申请一个100MB大小的数组,当内存中没有连续的、足够大的空间的时候,即便内存的剩余总可用空间大于100MB,仍然会申请失败;而链表恰恰相反,它并不需要一块儿连续的内存空间,它通过“...原创 2020-03-18 17:16:07 · 237 阅读 · 0 评论