数据结构
sunny_Harper
这个作者很懒,什么都没留下…
展开
-
剑指offer_03 二维数组中查找数字
在一个二维数组中,每一行都按从左到右递增的顺序排列,每一列都按照从上到下的顺序排列。实现在这个数组中的查找函数。思路:首先选取数组中右上角(左下角)的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字所在的行。代码: public static boolean FindArray(int[][]arr ,int number原创 2016-08-17 00:09:02 · 305 阅读 · 0 评论 -
剑指Offer_11 数值的整数次方
实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 思路:1.指数为负数,底数为0,底数为0且指数同时为0的情况。2.如果输入的指数exponent为32,我们在函数powerWithExponent的循环中需要做31次乘方。但我们可以换一种思路考虑:我们的目标是求出一个数字的32次原创 2016-09-01 21:07:15 · 202 阅读 · 0 评论 -
剑指Offer_07 用两个栈实现队列与 用两个队列实现栈
用两个栈实现队列与 用两个队列实现栈。 思路:1.两个栈实现队列。队列先进先出,可以使用栈1进数据,实现appendTail()方法。当队列出数据时,判断栈2是否为空,不为空,栈2.pop(),实现deletedHead()方法,为空则将栈1中数据pop后存入栈2中,实现deletedHead()方法。 ![这里写图片描述](http://img.blog.csdn.net/原创 2016-08-22 21:06:53 · 225 阅读 · 0 评论 -
剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
根据二叉树的前序和中序序列,重建二叉树 思路:根据二叉树前序遍历的特点,前序遍历的根节点在第一个位置。中序遍历根节点在中间的位置,根节点的左边是左子树,右边是右子树节点。前序遍历的第一个节点为根节点,在中序系列中搜索根节点的位置,确定左子树的节点个数以及内容。把前根和中根序列分为两部分,进行递归操作,分别建立左右子树。 ![这里写图片描述](http://img.blog.csdn.原创 2016-08-22 20:33:47 · 284 阅读 · 0 评论 -
剑指offer_10 二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2. 思路:1:针对正数,把n左移:把整数和1做位与运算看结果是不是0就知道了。1除了最右边的一位之外所有的位都是0(除法的效率比移位运算要低很多,在实际编程中应尽可能地用移位运算代替乘除法。)。如果是负数,比如0x80000000,运行的时候会发生什么情况呢?把原创 2016-08-30 20:54:48 · 189 阅读 · 0 评论 -
剑指offer_09 斐波那契数列
写一个函数,输入n,求斐波那契数列的第n项。 思路: 递归 、 顺序求 、公式。 递归:重复的节点数会随着n的增大而急剧增加,这意味着计算量会随着n的增大而急剧增大。事实上,用递归的方法计算的时间复杂度是以n的指数的方式递增的。 顺序:从下往上计算,首先计算f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)……依次类推就可以算出第n项了。很容易理解,这种思原创 2016-08-30 20:42:21 · 337 阅读 · 0 评论 -
剑指Offer_08 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为旋转。 输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。 思路:我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组的元素都是大于或者等于后面子数组的元素。我们还注意到最小的元素刚好是这两个子数组的分界线。在排序的数组中我们可以利用二分查找来实现O(logn)的查找。本题给出的数组在一定程度上是排序的,因原创 2016-08-29 20:54:27 · 371 阅读 · 0 评论 -
剑指offer_05 从尾到头打印链表
输入一个链表的头结点,从尾到头反过来打印出每个节点的值。 思路:使用递归或栈结构实现。(基于递归的代码看起来很简洁,但有个问题:当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。显式用栈基于循环的代码的鲁棒性要好一些。) 代码:class Node { public int data; public Node next原创 2016-08-18 22:58:07 · 299 阅读 · 0 评论 -
剑指offer_04 字符串替换
请实现一个函数,把字符串中的每个空格替换成“20%”。例如输入“We are happy.”,则输出“We20%are20%happy.” 原因:在网络编程中,如果URL参数中含有特殊字符,如:空格、“#”等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器识别的字符。转换规则是在“%”后面跟上ASCII码的两位十六进制的表。比如:空格的ASCII玛是32,即十六进制原创 2016-08-18 00:12:18 · 275 阅读 · 0 评论 -
理解KMP算法
KMP算法有一个文本串S,和一个模式串P,现在要查找P在S中的位置几个概念:字符串前缀、字符串后缀、字符串前缀后缀最大公共元素长度字符串子串的最长公共元素长度例:ABCDABD : 2Next 数组:当前字符前面字符串子串的最长公共元素长度步骤:假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置• 如果j = -1,或者当前字符匹配成功(即S[i]...原创 2018-11-23 00:31:58 · 370 阅读 · 1 评论