算法
喜欢薄荷味
这个作者很懒,什么都没留下…
展开
-
青蛙跳台阶之详细分析
1.题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。2.题目来源(剑指Offer、中等难度)https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387?tpId=13&&tqId=11162&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/ques原创 2020-07-14 11:04:52 · 345 阅读 · 1 评论 -
话说“贪心“与“动态规划“
1.算法思想1.1贪心思想1.2动态规划思想将待求解的问题分解成若干个子问题,先分别求解每一个子问题,然后2.算法步骤2.1贪心算法步骤(1)建立数学模型描述问题;(2)将求解的问题分为若干个子问题;2.2动态规划算法步骤3.算法特点3.1贪心3.2动态规划...原创 2020-07-14 10:25:34 · 245 阅读 · 0 评论 -
剑指offer-剪绳子(递归、动规、贪心)
1.题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。2.来源https://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8?tpId=13&&tqId原创 2020-07-12 22:10:42 · 365 阅读 · 0 评论 -
剑指Offer-构建乘积数组
1.题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)2.来源https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975原创 2020-07-06 22:12:28 · 99 阅读 · 0 评论 -
剑指Offer-不用加减乘除做加法
1.题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。2.来源https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?tpId=13&&tqId=11201&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking3.编吧"递归"递归结束条件:若原创 2020-07-06 21:54:37 · 93 阅读 · 0 评论 -
剑指offer-二叉树镜像
1.题目描述操作给定的二叉树,将其变换为源二叉树的镜像2.来源https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=13&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking3.编吧3.1递归解法这道二叉树镜像问题显然使用递归思想比较简单;递归结束的条件原创 2020-07-06 13:10:33 · 114 阅读 · 0 评论 -
leetcode01-最大子序和
1.题目描述:给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和;2.来源:https://leetcode-cn.com/problems/maximum-subarray/3.编吧:动态规划核心思想:若当前元素之前的和小于0(presum<0),则丢弃当前元素之前的数列;步骤:初始值:maxsum = nums[0] = -2;presum = 0(1)num = -2;presum = max(presum+n原创 2020-05-28 18:01:34 · 216 阅读 · 0 评论 -
挑战七大排序算法-07归并排序
归并排序1.原理排序一个数组,先把数组从中间分成前后两个部分,然后对前后两部分分别排序,再将排序好的两部分合并在一起2.实现public void mergeSort(int[] array){ mergeSortInternal(array,0,array.length-1); } private void mergeSortInternal...原创 2020-02-20 17:02:57 · 141 阅读 · 0 评论 -
挑战七大排序算法-06快速排序
快速排序1.原理"分治思想" 从待排序区间选择一个数,作为基准值(pivot); Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边; 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据。 ...原创 2020-02-20 17:01:38 · 206 阅读 · 0 评论 -
挑战七大排序算法-05冒泡排序
目录冒泡排序1.原理2.实现3.性能分析冒泡排序1.原理在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序2.实现public void bubbleSort(int[] array){ int n = array.length; //控制比较次数 for (int i ...原创 2020-02-20 16:58:53 · 221 阅读 · 0 评论 -
挑战七大排序算法-04堆排序
目录堆排序1.原理2.实现3.性能分析堆排序1.原理基本原理也是选择排序,只是不再使用遍历的方式查找无序区间的最大数,而是通过堆来选择无序区间的最大数升序:大顶堆;降序:小顶堆堆排序的基本思路:a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;c.重新调整结构,使其满足堆定义,然...原创 2020-02-20 16:56:50 · 210 阅读 · 0 评论 -
挑战七大排序算法-03选择排序
选择排序算法的实现思路类似于插入排序,即已排序区间+未排序区间1.算法定义选择排序是基于选择的排序,即每次需要选择元素进行排序2.算法思想(1)第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(2)然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。(3)以此类推,直到全部待排序的数据元素的个数为零来看看,选择排序原理...原创 2019-10-20 09:00:41 · 164 阅读 · 0 评论 -
挑战七大排序算法-02希尔排序
算法如其名,肯定是某个优秀的学者Shell提出了这种排序算法;1.定义是简单插入排序的改进版,它与插入排序不同之处在于:希尔排序会优先比较距离较远的元素。希尔排序又称缩小增量排序,是对直接插入排序的优化;2.基本思想该方法实质上是一种分组插入方法比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换;(1)算法先将要排序的一组数...原创 2019-10-19 22:21:24 · 163 阅读 · 0 评论 -
挑战七大排序算法-01直接插入排序
路人甲:嗨,你好,排小序,我想问你一个问题,好吗?排小序:好呀,你问吧,我知道很多关于排序的知识呢,只要你问,我都会告诉你呀路人甲:问题来喽,一个有序的数组,往里面添加一个新的数据后,如何继续保持数据有序呢?排小序:嗯嘛嘛,这个嘛,是这样的,很简单,只要遍历数组,找到数据应该插入的位置将其插入即可。怎么样,我厉害吧路人甲:哇塞,你真棒。带我学习排序吧(害羞)针对以上排序的经典问...原创 2019-10-19 18:48:58 · 146 阅读 · 0 评论 -
挑战七大排序算法-排序
1.排序定义对一组任意数据元素(或记录)经过指定关键字排序操作后,就可以把它们变成一组按照关键字排序的有序序列。通常排序的目的是快速查找;平时的上下文中,如果提到排序,通常指升序;通常意义上的排序指的是原地排序;2.衡量排序的指标一般从以下三个方面来衡量算法:(1)执行效率;(2)内存消耗;(3)稳定性;2.1排序算法的执行效率说简单点,就是时间复杂度的问题1.最好...原创 2019-10-19 17:47:23 · 221 阅读 · 0 评论