![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
文章平均质量分 57
Allen-Liu
君子终日乾乾,夕惕若,厉无咎。——自勉。
展开
-
爬台阶问题(递归和动态规划实现)
问题描述: 一个人爬楼梯,每次只能爬1个或2个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法? 这个问题可以分解成两个子问题(当n>=2时),最后一步是爬1个台阶还是爬两个台阶(两种情况),当爬1个台阶的时候:问题就分解成,最后爬一个台阶,前面n-1个台阶有 多少种爬法?当最后爬2个台阶的时候,前面n-2个台阶有多少种爬法?然后两个子问题方法相加就是会后结果。两个子问题又可以再分割成原创 2017-10-06 10:55:36 · 2477 阅读 · 0 评论 -
python3实现选择排序和插入排序
选择排序和插入排序与我们上一篇博客讲的冒泡排序在实践复杂度上相近,都是效率比较低的排序算法。这里提供两者的python3代码,具体的算法原理待以后补充:__author__ = "Allen Liu"__time__ = "2017/8/13"'''This program used to '''import random# 选择排序def select_sort(li):原创 2017-08-14 18:19:13 · 546 阅读 · 0 评论 -
详解冒泡排序及Python3代码实现
下面详细介绍冒泡排序的思想以及python3代码实现。首先是这样一个常识:在水中两个相同深度的气泡,大的气泡上浮的快,最先上浮到水面。然后假设有一个列表保存着一组数据,如下所示:左端为里表中的元素,右端为索引。为什么要竖着放,这样可以给你‘冒泡’的感觉。当然我们很容易看出来8是最大的会最先浮出水面,但是计算机不会想我们这样‘看’。它只会一步步来,首先假设第一个数(索引为0的数为原创 2017-08-14 18:11:45 · 17046 阅读 · 0 评论 -
二叉树的递归遍历
下面首先介绍下二叉树遍历的定义以及分类,然后介绍递归法实现二叉树遍历。二叉树的遍历指的是按照一定的搜索路径和规则对二叉树中的节点进行访问,使得每个节点被访问且仅被访问一次。(这里的一次访问可以理解成一次操作)对二叉树的遍历操作可以分为:层次遍历,先根(DLR)遍历,中根(LDR)遍历,后根(LRD)遍历。对应的定义及访问规则如下:1.层次遍历操作如果二叉树为空,则为空操作;否则先访原创 2017-06-03 11:56:48 · 1620 阅读 · 0 评论 -
二叉树的存储结构
二叉树的存储结构可以分为顺序存储结构和链式存储结构。二叉树的顺序存储结构:就是将二叉树中各个节点的值按照一定的顺序存放在一组地址连续的存储单元中。由于二叉树本身是非线性结构,所以首先要对二叉树中的节点进行排序,从而确定各个节点的逻辑关系。例如可以从根节点开始自上而下按层进行编号,如图所示:按照节点的排序规则决定了节点在存储单元中的相对位置,而且我们发现这种存储结构非常适合存原创 2017-06-03 10:57:29 · 4343 阅读 · 0 评论 -
二叉树及二叉树的相关性质
二叉树:是由n>=0个节点所构成的有限集合。当n=0时,此二叉树为空树;当n>0时,这个二叉树是由一个根节点和两个互不相交的分别称为左子树和右子树的二叉树构成。二叉树与树的区别:1.树中的每个节点可以有多于两个的子树,而二叉树每个节点至多有两个子树。2.树中的子树是不分顺序的,而二叉树中的子树有严格的左右之分。3.相同节点数所能组成的不同形态的树和二叉树的数目不同。下面介绍两种原创 2017-06-02 22:23:27 · 582 阅读 · 0 评论 -
表达式/如何将中缀表达式转化成后缀表达式
首先介绍下什么是中缀表达式,后缀表达式。表达式一般分为前缀表达式,中缀表达式和后缀表达式。其中我们最为熟悉的是中缀表达式,也就是书本上最常用的表示形式。中缀表达式是将运算符放在两个操作数的中间。前缀表达式是将运算符放在两个操作数之前。后缀表达式(又称逆波兰表达式)是将运算符放在两个操作数之后。例如:中缀表达式(A+(B-C/D)*E)对应的前缀表达式是(+A*-B/CDE)对应的后缀表达式原创 2017-05-27 21:24:03 · 7453 阅读 · 1 评论 -
求解汉诺塔问题
下面介绍汉诺塔问题以及给出其求解方法和java代码。n阶汉诺塔问题:假设有三个塔座,假设为x, y, z. 现在在x塔座上有n个直径各不相同的圆盘,且满足从下到上直径依次减小。问题是需要借助y塔座,将所有圆盘移动到z塔座,且不改变原有顺序。在移动时需要满足的规则是:1.每次只能移动一个圆盘。2.圆盘可以移动到x,y,z任何一个塔座。3.任何时刻都应该满足下面的圆满的直径大于上面的圆原创 2017-05-25 22:43:52 · 903 阅读 · 0 评论 -
分治法
分治法:divide and conquer基本思想:通过寻找大规模问题与小规模问题解之间的关系,并且通过求解小问题来得到大问题的解。定义:分治法是将一个大规模的问题分解为若干个规模小的子问题,然后找出这些子问题或者一部分子问题的解并由此得到原问题的解。在解决子问题的时候需要利用递归的思想将子问题的求解分解成更小的子问题进行求解,分解过程一直持续到问题的规模小到可以直接求解。分治法原创 2017-05-08 21:17:58 · 501 阅读 · 0 评论 -
快速排序代码python3
本文介绍快速排序的思想,以及python3实现:__author__ = "Allen Liu"__time__ = "2017/8/13"'''This program used to '''import randomdef quick_sort(data, left, right): if left < right: mid = partition(data原创 2017-08-14 20:23:06 · 788 阅读 · 0 评论 -
归并排序(python3)
本文介绍归并排序及python3实现,原理部分稍后补上,pyhton3代码如下:__author__ = "Allen Liu"__time__ = "2017/8/13"'''This program used to '''import random# 归并排序def merge(data, low, mid, high): i = low j = mid + 1原创 2017-08-14 23:15:08 · 1661 阅读 · 2 评论 -
二分查找及python实现
首先介绍二分查找,然后介绍其python实现(代码返回查找的次数,这也是很多笔试题会问到的)。二分法:也称二分搜索(binary search)、折半搜索(half-interval search)、对数搜索(logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。二分查找的实现步骤:1.首先查找数组必须是有序的(假设为升序)。2.取查找数组中间的数作原创 2017-08-20 21:14:20 · 797 阅读 · 0 评论 -
华为机试题-约瑟夫问题
记得做个一个类似的问题,就是大家围城一个圈,然后依次数数,数到特定数的退出,问最后留下谁。今天发现这原来是个很经典的问题:约瑟夫 环约瑟夫环问题描述如下:历史学家约瑟夫和友人以及其他39人多在山洞中躲避战乱,除约瑟夫和友人外其他人表示要集体自杀来表明自己绝不投降的志气。做法是41个人围城一个圈,然后顺时针报数,1,2,3.报数为3的人立刻自然,然后下一个人从1重新开始报数。约瑟夫和友人不想原创 2017-09-18 19:46:24 · 1056 阅读 · 0 评论 -
华为编程题-加密解密
问题描述:__time__ = "2017/9/15"'''This program used to '''#print('a' + 1)def jiami(in1): out1 = [] for i in in1: out1.append(i) for i in range(len(out1)): if (out1[i].原创 2017-09-15 16:54:32 · 833 阅读 · 0 评论 -
华为机试题-删除出现次数最少的字符
分享一道华为的机试题:import java.util.HashMap;//引入类 import java.util.Scanner; import java.util.Set;public class Shanzifu{ public static void main(String[] srgs) { Scanner sc = new Scanner(Syst原创 2017-09-15 14:21:41 · 651 阅读 · 0 评论 -
换汽水(华为编程题)
看到华为有一道换汽水的编程题,分享如下:题目:某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶原创 2017-09-13 20:52:45 · 1642 阅读 · 0 评论 -
判断是否为回文字符
要求:用户输入一串字符,程序判断这个字符串是否为回文,并输出判断结果。java实现:package test1;import java.util.Scanner;public class IsPalindrome { public static void main(String[] args) { boolean indicator = true;//设置一个标志 S原创 2017-09-07 23:41:06 · 635 阅读 · 0 评论 -
将输入数组逆序输出
本文用java实现将输入的数组逆序输出。要求:输入为一个数组,以空格隔开(两个元素间可有多个空格),然后将输入的数字逆序输出,不同元素间以一个空格隔开。java代码实现如下:package test1;import java.util.Scanner;public class ReverseArray { public static void main(String[] arg原创 2017-09-07 22:52:40 · 4383 阅读 · 0 评论 -
截取字符串以多行的形式输出
问题描述:输入一个字符串(包括汉字和英文字母以及其他符号)以及每行的字节数。输出为一个字符串被分割为多行输出。举例:Please input string:dasa大大dadPlease input string number per line:4Print the string as 4 byte per line:dasa大大dad这里需要注意的是:原创 2017-09-07 21:50:43 · 1294 阅读 · 0 评论 -
格式化输出n天后的时间(java实现 )
要求:写一段代码输出当前时间以及任意n天后的时间。package test1;import java.util.Date;import java.text.SimpleDateFormat;public class Nextday { public static void main(String[] args) { //定义字符串的格式 SimpleDateFormat原创 2017-09-07 20:49:24 · 699 阅读 · 0 评论 -
链表详解
下面将从链表的定义、分类、特点对链表展开介绍。链表:链表是一种物理存储单元上非连续、非顺序的存储结构。它链表有一个“head”变量,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址(双向链表为三个部分,分别为前驱指针、数据、后驱指针)。因此,head指向第一个元素;第一个元素又指向第二个元素;……,直原创 2017-03-31 21:29:33 · 981 阅读 · 0 评论