算法
zhisheng_blog
这个作者很懒,什么都没留下…
展开
-
常用排序算法的具体代码实现
常用排序算法的具体代码实现原创 2016-03-06 17:14:50 · 896 阅读 · 0 评论 -
《剑指offer》数组——二维数组中查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素 arr[row][col] 与 target 进行比较 这里就选右上角元素,当 target < arr[0][c原创 2017-03-13 20:24:13 · 553 阅读 · 0 评论 -
《剑指Offer》位运算——求二进制数中1的个数
题目: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1原创 2017-03-22 22:48:01 · 1318 阅读 · 12 评论 -
《剑指Offer》递归和循环——斐波那契数列
题目: 大家都知道斐波那契数列(0、1、1、2、3、5、8、13、21、……), 现在要求输入一个整数n,请你输出斐波那契数列的第n项。主要算法:public int Fibonacci(int n){ int a=1,b=1,c=0; //对n进行判断 if (n <= 0){ return 0;原创 2017-03-12 23:03:46 · 634 阅读 · 0 评论 -
《剑指Offer》替换空格(将字符串中的空格替换为%20)
题目: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。思路:这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换。看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节。这种解法的时间复杂度为O(n^2)!!!另外原创 2017-03-12 11:10:01 · 3134 阅读 · 6 评论 -
《剑指Offer》递归和循环——矩形覆盖
题目: 我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?代码:RectCover.javapublic class RectCover{ public int RectCover(int target) { if (target <= 0) { re原创 2017-03-20 23:09:22 · 964 阅读 · 3 评论 -
一道值得思考的数据结构题目(入栈与出栈序列)
就业指导课上做的一道数据结构中有关栈的题目,当时一开始自己思考不全面,错选了。一个栈的入栈序列为1,2,3,…,n ,其出栈序列是 p 1 ,p 2 ,p 3 ,…p n 。若p 2 = 3,则 p 3 可能取值的个数是()A:n -3B:n - 2C:n - 1D:无法确定答案:C ( n - 1)个看了别人的一些解析,觉得不够完善,下面给出自己的见解。首先,栈的先进后出原则大家应该是知道的。原创 2017-03-08 19:20:53 · 3493 阅读 · 3 评论 -
《剑指Offer》递归和循环——跳台阶
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路 首先我们考虑最简单的情况。如果只有1个台阶,那么显然只有一种跳法;如果是2级台阶,那么有2种跳法。 对于一个有n级台阶的楼梯来说,我们设跳法为 f(n) ,假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次, 假如我们先跳2个台阶,则剩下 n-2 阶,跳法原创 2017-03-17 22:26:10 · 1143 阅读 · 4 评论 -
《剑指offer》栈和队列——用两个栈实现一个队列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路 将一个栈作为压入栈 ( stackPush ),在压入数据时只往该栈压入,另外一个栈作为弹出栈,在弹出数据时只从这个栈弹出 ( stackPop )。 因为栈的特点是:先进后出,所以先将所有数据逐一压入 stackPush 栈中,然后再将所有数据从栈 stackPush 顶到栈底逐一压原创 2017-03-17 21:02:07 · 854 阅读 · 5 评论 -
【排序】时间复杂度为O(N^2)的排序——冒泡、选择和插入排序
相关阅读:Java常用排序算法/程序员必须掌握的8大排序算法排序冒泡排序冒泡排序的时间复杂度为 O(n^2)冒泡排序的具体步骤请看下图:这里在写一个简单的冒泡排序题目吧题目:对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1, 2, 3, 5, 2, 3], 6返回值: [1, 2, 2, 3, 3, 5原创 2017-01-22 20:12:45 · 2531 阅读 · 7 评论 -
【字符串】判断两字符串是否互为旋转词?
相关阅读:字符串逆序问题的解决方法题目:如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。测试样例: “原创 2017-01-21 18:55:00 · 1376 阅读 · 9 评论 -
【字符串】字符串逆序
字符串题目一:如果一个字符串 str ,把字符串 str 前面的任意部分挪到后面去形成的字符串叫做 str 的旋转词。比如 str = “ 1234 ” , 那么 str 的旋转词有 “ 1234 ” , “ 2341 ” , “ 3412 ” , “ 4123 ” 。给定两个字符串 a 和 b ,请判断 a 和 b 是否互为旋转词?举例:a = ” cdab ” , b = ” abcd ” 。返原创 2017-01-21 13:29:37 · 2613 阅读 · 0 评论 -
【二叉树】二叉树打印
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。举个栗子:如下就是一个二叉树详细步骤: 1.初始化时,last=1,把1放入队列; 2.将1出队,把1的子孩子2,3放入队列,更新nlast=3; 3.nl原创 2017-01-20 10:30:29 · 1134 阅读 · 0 评论 -
【二叉树】二叉树序列化和反序列化
二叉树序列化和反序列化1、二叉树 ——> 字符串(序列化)2、字符串 ——> 二叉树(反序列化)序列化的方式1、根据先序遍历序列化2、 根据中序遍历序列化3、根据后序遍历序列化4、按层序列化题目:给定一棵二叉树的头节点head,并已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化的方案,并用代码实现。思路:例:先序遍历对二叉树进行序列化假设序列化结果为str, 初始时str为空字原创 2017-01-20 12:22:01 · 1235 阅读 · 0 评论 -
网易云音乐登录信息加密算法详解
原文地址:网易云音乐新登录API分析网易云音乐登录加密算法核心过程如下: text = { 'username': username, 'password': password, 'rememberLogin': 'true' } text = json.dumps(text) secKey = createSecretKey(转载 2016-10-11 16:28:29 · 14704 阅读 · 2 评论 -
各种排序算法总结(C++实现)
排序算法是最基本最常用的算法,不同的排序算法在不同的场景或应用中会有不同的表现,我们需要对各种排序算法熟练才能将它们应用到实际当中,才能更好地发挥它们的优势。今天,来总结下各种排序算法。下面这个表格总结了各种排序算法的复杂度与稳定性:各种排序算法复杂度比较.png冒泡排序冒泡排序可谓是最原创 2016-03-31 21:02:49 · 1264 阅读 · 0 评论 -
Java常用排序算法/程序员必须掌握的8大排序算法
分类:1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序不稳定:快速排序,希尔排序,堆排序。先来看看8种排序之间的关系: 1.直接插入排序原创 2016-03-29 22:39:17 · 5982 阅读 · 1 评论 -
《剑指Offer》查找和排序——旋转数组中的最小数字
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素 注原创 2017-03-23 19:41:27 · 1034 阅读 · 0 评论