关于算法——理解与实现
开开心心不动脑经
春招刷题打卡记录
展开
-
[剑指Offer学习] 面试题N1:二维数组中的查找
剑指Offer:二维数组中的查找题目描述规律发现运行结果显示如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序...原创 2019-08-27 11:12:14 · 92 阅读 · 0 评论 -
[剑指Offer学习] 面试题N10:二进制中1的个数Java实现
剑指Offer:二进制中1的个数Java实现题目描述规律发现代码展示题目描述规律发现代码展示原创 2019-09-24 17:00:25 · 141 阅读 · 0 评论 -
[剑指Offer学习] :二叉搜索树原理及Java实现
剑指Offer:二叉搜索树原理及Java实现原创 2019-09-24 16:21:33 · 158 阅读 · 0 评论 -
[剑指Offer学习] :堆结构理解及堆排序的Java实现
剑指Offer:堆结构理解及堆排序的Java实现什么是堆结构堆排序及其实现逻辑堆排序的实现步骤堆排序复杂度分析代码展示什么是堆结构堆排序及其实现逻辑堆排序的实现步骤堆排序复杂度分析代码展示...原创 2019-09-22 20:19:02 · 264 阅读 · 0 评论 -
[剑指Offer学习] :冒泡排序与鸡尾酒排序原理及Java实现
剑指Offer:冒泡排序与鸡尾酒排序原理及实现算法描述代码展示算法描述算法思想原理:比较两个相邻的元素,将值大的元素交换至右端。思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。基本步...原创 2019-09-22 15:26:56 · 224 阅读 · 0 评论 -
[剑指Offer学习] :归并排序原理及Java实现
剑指Offer:归并排序原理及实现算法描述代码展示算法描述原理归并排序:归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。基本步骤分而治之(divide - co...原创 2019-09-20 10:51:08 · 309 阅读 · 0 评论 -
[剑指Offer学习] :快速排序原理及Java实现
剑指Offer:快速排序原理及其两种实现方式算法描述1、直接插入排序算法代码展示算法描述1、直接插入排序算法原理快速排序是对冒泡排序的改进,它使用分治法的思想,每次循环根据指定的基准数,将其他元素分别放置其左右(升序排序,大的放右小的放左),第二次循环,以基准数为中心,分为左右两部分,每部分再通过新的基准数排序快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的...原创 2019-09-19 10:07:40 · 313 阅读 · 0 评论 -
[剑指Offer学习] :插入排序问题及其Java实现
剑指Offer:直接插入排序及其改进算法描述1、直接插入排序算法2、二分插入排序算法3、希尔排序算法规律发现代码展示运行结果显示算法描述1、直接插入排序算法原理利用插入法对无序数组排序时,我们其实是将数组R划分成两个子区间R[1..i-1](已排好序的有序区)和R[i..n](当前未排序的部分,可称无序区)。插入排序的基本操作是将当前无序区的第1个记录R[i]插人到有序区R[1..i-1]...原创 2019-09-18 20:49:53 · 150 阅读 · 0 评论 -
[剑指Offer学习] 面试题N8:青蛙跳台阶问题
剑指Offer:斐波拉契变形:青蛙跳台阶问题题目描述规律发现代码展示拓展规律发现题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。规律发现思路:简化问题可以从一级台阶开始分析,一级台阶只有一种跳法。如果有二级台阶的话,有两种跳法。以此类推,当台阶数量为n的时候(即f(n)),可以分两种情况:1.第一次跳一级台阶(f(n-1)) 2. 第一次跳...原创 2019-09-14 20:51:39 · 265 阅读 · 0 评论 -
[剑指Offer学习] 面试题N7:斐波拉契数列
剑指Offer:斐波拉契数列题目描述规律发现完整代码展示运行结果显示题目描述题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39规律发现思路:最简单的的想法是通过递归函数实现,但是递归函数存在严重的时间效率问题,当n增大时,时间复杂度以n的指数的方式递增。因此,这不是一个好的方法,递归方法之所以慢,是因为重复...原创 2019-09-14 20:00:21 · 128 阅读 · 0 评论 -
[剑指Offer学习] 面试题N6:旋转数组的最小数字
剑指Offer:旋转数组的最小数字题目描述规律发现完整代码展示运行结果显示题目描述题目描述: 把一个数组最开始的若干个元素搬到数组的末尾, 我们称之数组的旋转。输入:一个递增排序的数组的一个旋转;输出:旋转数组的最小元素。例如:数组{3,4, 5, 1, 2 }为{ l1,2,3, 4,5}的一个旋转,该数组的最小值为1规律发现思路:旋转之前的数组是一个升序排序的数组,旋转之后的...原创 2019-09-14 16:54:18 · 150 阅读 · 0 评论 -
[剑指Offer学习] 面试题N5:两个栈实现一个队列 & 两个队列实现一个栈
剑指Offer:两个栈实现一个队列题目描述规律发现完整代码展示运行结果显示题目描述题目描述:两个栈实现一个队列。请实现队列的两个函数push 和pop,分别完成在队列尾部插入结点和在队列头部删除结点的功能。规律发现思路:栈是一种受限的线性表,其插入和删除操作只能在表的一端进行,该端称为顶端top,最后插入的元素最先删除,即后进先出队列也是一种受限的线性表,其插入操作只能在队列的尾...原创 2019-09-12 09:40:14 · 222 阅读 · 0 评论 -
[剑指Offer学习] 面试题N4:重建二叉树
剑指Offer:重建二叉树题目描述规律发现完整代码展示运行结果显示题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。规律发现题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设...原创 2019-09-10 21:42:34 · 122 阅读 · 0 评论 -
[剑指Offer学习] 面试题N3:从尾到头打印链表
剑指Offer:从尾到头打印链表题目描述规律发现完整代码展示方法1:栈的思想方法2:递归思想运行结果显示题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。规律发现思路:如果允许在打印链表的时候修改链表的结构,,可以把链表中链接节点的指针反转过来如果不允许修改结构有以下两种思路:① 从尾到头打印,遍历的顺序是从头到尾,打印的顺序是从尾到头,典型的“先进后出”,使用栈...原创 2019-09-10 15:18:44 · 97 阅读 · 0 评论 -
[剑指Offer学习] 面试题:有序数组的合并
剑指Offer:有序数组的合并题目描述规律发现完整代码展示1、java实现2、C++实现题目描述规律发现完整代码展示1、java实现public class N2同类型两个排序的数组合并 { public static void merge(int A1[],int[] A2,int A3[]){ //所有的字符串的尾部都会有一个'\0'字符,所以实际存储的尾部是...原创 2019-09-08 21:35:41 · 151 阅读 · 0 评论 -
[剑指Offer学习] 面试题N2:替换空格
#剑指Offer:字符串空格替换##题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。...原创 2019-08-27 14:51:10 · 153 阅读 · 0 评论 -
[剑指Offer学习] 面试题N14:剪绳子问题的动态规划方法和贪婪算法的Java实现
剑指Offer:剪绳子Java实现题目描述规律发现适用于动态规划方法求解的问题的特点是:方法1:动态规划求解方法2:贪婪算法求解代码展示运行结果显示题目描述给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长...原创 2019-10-10 20:13:00 · 248 阅读 · 0 评论