数据结构与算法
算法与实践
郑德帅
滴滴
展开
-
《剑指offer》第21-30题
《剑指offer》第21-30题21 栈的压入、弹出序列22 从上往下打印二叉树23 二叉搜索树的后序遍历序列24 二叉树中和为某一值的路径25 复杂链表的复制26 二叉搜索树与双向链表27 字符串的排列28 数组中出现超过一半的数字29 最小的k个数30 连续子数组的最大和21 栈的压入、弹出序列 此题个人解析在另一篇博客,点击跳转栈的压入、弹出序列22 从上往下打印二叉树题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析及代码'''方法一:借助辅助队列层序遍历原创 2020-07-06 00:35:37 · 329 阅读 · 0 评论 -
《剑指offer》第21题:栈的压入、弹出序列
栈的压入、弹出序列21 栈的压入、弹出序列方法一: 暴力法方法二:简化版21 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思考:考察栈的栈的特性:后入先出有一个最笨的方法就是列举出所有的出栈入栈顺序入栈元素:1,2 出原创 2020-07-02 11:54:22 · 252 阅读 · 0 评论 -
《剑指offer》第10-20题:矩形覆盖到包含min函数的栈
《剑指offer》第10-19题10 矩形覆盖11 二进制中1的个数10 矩形覆盖11 二进制中1的个数原创 2020-07-01 16:10:10 · 264 阅读 · 0 评论 -
《剑指offer》第6题:旋转数组的最小数字
旋转数组的最小数字1 题目描述2 分析及题解2.1 暴力遍历法2.2 二分法1 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。2 分析及题解直接min(rotateArray)的方法就不放了…2.1 暴力遍历法从第一个元素开始遍历,逐个对比,找出最小元素cl原创 2020-06-30 14:40:50 · 200 阅读 · 0 评论 -
《剑指offer》第9题:变态跳台阶
变态跳台阶1 题目描述2 分析及题解2.1 递推法2.2 概率法1 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。2 分析及题解2.1 递推法 和之前一样可递推出公式:f(n)=f(n-1)+f(n-2)+…+f(1)+1 f(n-1)=f(n-2)+f(n-3)+…+f(1)+1得到: f(n)=2*f(n-1)所以:f(n) = 2^(n-1)class Solution: def jumpFl原创 2020-06-29 00:01:45 · 262 阅读 · 0 评论 -
《剑指offer》第8题:跳台阶
跳台阶1 题目描述2 分析及题解1 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。2 分析及题解 题解中有一个大佬的解释比较好: 假设有6阶台阶,减去1阶台阶,就是5阶台阶的跳法, 减去2阶台阶,就是4阶台阶的条法. 所以 f(6) = f(5) + f(4)依次类推,如此一来,就和前面的斐波那契数列差不多逻辑了,这里只写一种方法,其他的参考上一篇博客。class Solution1: def jumpF原创 2020-06-28 23:48:30 · 272 阅读 · 0 评论 -
《剑指offer》第7题:斐波那契数列
斐波那契数列1 题目描述2 分析及题解2.1 方法一:递归2.2 方法二:递归2.3 方法三:循环迭代1 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=392 分析及题解2.1 方法一:递归之前写过一题是需要返回整个斐波那契数列的,所以此次递归借助一个初始化列表class Solution1: def __init__(self): self.fibList = [0, 1] #原创 2020-06-28 23:44:41 · 296 阅读 · 0 评论 -
《剑指offer》第5题:用两个栈实现队列
1 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。2 分析及题解 python中没有栈,用list来代替栈。那么定义两个栈,一个用来push元素,一个用来pop元素class Solution1: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here原创 2020-06-28 23:37:03 · 200 阅读 · 0 评论 -
《剑指offer》第3题:从尾到头打印链表
从尾到头打印链表1 题目描述2 分析及题解2.1 方法一:借助栈2.2 方法二:递归1 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。2 分析及题解2.1 方法一:借助栈class Solution: def printListFromTailToHead(self, listNode:ListNode): # write code here if listNode == None: return []原创 2020-06-28 23:22:50 · 150 阅读 · 0 评论 -
《剑指offer》第4题:重建二叉树
1 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2 分析及题解 根据前序和中序遍历顺序: 前序遍历:根节点→左子树→右子树 中序遍历:左子树→根节点→右子树 之后找到根节点,划分左子树和右子树,递归class Solution1: def reConstructBinaryTr原创 2020-06-28 17:47:49 · 156 阅读 · 0 评论 -
《剑指offer》刷题记录汇总篇
《剑指offer》刷题汇总1 前言2 刷题网站3 刷题笔记汇总1 前言 最近啃了个把月的数据结构与算法,有点飘了,准备拿牛客网的剑指offer模块练练手,个人觉得自己刚入门(或许还没入),所以这篇博客比较适合想学习数据结构或者刚接触数据机构的新手朋友朋友们,当然,大佬们也可以看看,一是指导,二是差缺补漏。 刷题顺序即题目顺序,时间的话大概一周2 刷题网站点击直达:剑指offer3 刷题笔记汇总题号题目知识点JZ1二维数组中的查找数组、查找JZ2替换空格字原创 2020-06-24 14:13:58 · 551 阅读 · 0 评论 -
《剑指offer》第2题:替换空格
替换空格1 题目描述、要求2 分析及题解 2.1 方法一:内置方法str.replace() 2.2 暴力遍历替换(借助新字符串) 2.3 方法三:字符串分割+拼接1 题目描述、要求题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目要求: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M2 分析及题解 2.1 方法一:内置方法st原创 2020-06-24 16:24:34 · 140 阅读 · 0 评论 -
《剑指offer》第1题:二维数组中的查找
方法一:暴力法:原创 2020-06-24 14:17:38 · 261 阅读 · 0 评论 -
Pycharm 安装Leetcode插件
Pycharm安装Leetcode插件1 插件安装2 配置插件3 插件简单使用转载请注明转自:https://leejason.blog.csdn.net/article/details/1065099421 插件安装 能看到这里的基本都已经安装好Pycharm了,所以直接打开Pycharm,依次点击File-Settings-Plugins-Maketplace ,然后在搜索框输入leetcode,就会显示我们的leetcode editor插件,点击Install,跳出的界面点检accept,原创 2020-06-03 00:10:23 · 10979 阅读 · 3 评论 -
数据结构、算法、程序的关系
这里写目录标题初衷数据结构、算法、程序的联系初衷 数据结构、算法、程序的联系数据结构 = 数据 + 结构算法 = 算 + 法程序 = (流)程 + (顺)序反爬虫措施,读者略过:转载请标明转自:https://leejason.blog.csdn.net/article/details/106466258...原创 2020-06-02 01:14:18 · 7571 阅读 · 0 评论 -
Python实现十大经典排序算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性...转载 2019-11-05 22:50:40 · 7212 阅读 · 0 评论