
数据结构与算法
文章平均质量分 53
xcxy2015
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java小算法——根据特殊字符切割一维字符数组
假设现在有一个一维数组,我们查找之中的一个特殊字符,随后,将这个一维数组以这个字符为界,将数组分成若干个晓得一维数组,并存入一个二维数组。 (新生成的数组中不含这个字符)原创 2017-04-09 22:08:17 · 1102 阅读 · 0 评论 -
二叉树前中后根序及层次遍历的递归和非递归实现
今天总结一下二叉树的各种遍历方式。首先,创建二叉树节点类如下:static class BinaryTreeNode{ private BinaryTreeNode m_pleft = null; private BinaryTreeNode m_pright = null; private int m_value = 0; public BinaryTreeNode getM_...原创 2018-03-05 11:01:54 · 700 阅读 · 0 评论 -
剑指offer系列(11)——打印1到最大的n位数
题目要求如下: 输入数字n,按顺序打印出从1到最大的n为十进制数。比如输入3,则输出1,2,3一直到最大的3位数即999。 这个题目很明显要考虑的就是大数问题,对于大数问题,要么用java的大数类BigInteger来做。(我们只需每次给其加一一直到其跟最大的n位数相等即可),要么就把数字的运算转成字符串操作即可。这里我们只采用第二种方法。 要想把加法转成字符串操作,我们可以对每...原创 2018-04-07 17:27:31 · 243 阅读 · 0 评论 -
剑指offer系列(12)——在O(1)时间删除链表节点
题目如下: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。首先,定义一个内部类表示结点:class Node{ public Node(int n){ this.number = n; } public Node(){ this(0); } private int number; private Node next; public int...原创 2018-04-07 20:51:29 · 167 阅读 · 0 评论 -
剑指offer系列(9)——二进制中一的个数
题目如下: 请实现一个函数,输入一个整数输出该数二进制表示一的个数,例如把9表示成二进制,是1001,有两位是1,因此如果输入就该函数输出2。 刚开始看到这个题,我们就很容易想出这样一个方法。我们先判断这个数的从右边数第一位是不是一?这个可以很简单的用这个数与1进行与操作来实现。之后我们将这个数向右移一位。再像刚才一样判断从右边数第二位是不是一,我们可以一直这样循环下去,一直到...原创 2018-04-02 22:15:57 · 176 阅读 · 0 评论 -
剑指Offer系列(13)——调整数组顺序使奇数位于偶数后面
题目要求: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 这个题目其实做起来并不难,书上这里着重讲的是这个程序的扩展性。如果题目更改判断条件之后,我们应该怎样改变自己的源代码?最优方法是将这个判断条件抽象出来,让调用者去实现,每次调用方法时必须传入一个判断是否交换的标准,这里我们用接口来实现。 ...原创 2018-05-02 19:59:45 · 172 阅读 · 0 评论 -
剑指Offer系列(10)——数值的整数次方
题目如下: 实现函数double Power(double base , int exponent), 求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 这个题目需要注意的有两点:一是我们需要分情况讨论,看似一个数的整数次方很好求,直接用exponent个base撑起来即可,但实际上我们要分以下几种情况。(以下用exp代替exponent) ...原创 2018-05-02 20:58:33 · 147 阅读 · 0 评论 -
剑指Offer系列(14)—— 链表中倒数第k个节点
题目如下:输入一个链表,输出该链表中倒数第k个结点,为了符合大多数人习惯,本题从第一个开始计数,即链表的尾节点是倒数第一个节点,如有一个链表结点依次为: 1 2 3 4 5 6,则倒数第3个结点是数值为4的结点。 求链表中倒数第k个节点,这个问题主要要注意两个方面:一是思路:刚看到这个题肯定想倒着数k个就行了,但这个是单项链表,因此我们无法逆着来寻找,但我们可以将链表存在一个栈中,...原创 2018-08-17 22:33:49 · 187 阅读 · 0 评论 -
剑指Offer系列(15)——反转链表
题目如下:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 因为链表是一个单向链表,因此如果我们需要倒序复制的话,很明显是一个后进先出的数据结构,因此第一个很明显的想法就是用栈解决,即将链表顺序存入栈,再弹出即可,代码实现如下:private static Node reverseList(Node head) { //注意特殊情况:传入参数为null...原创 2018-08-22 22:19:12 · 200 阅读 · 0 评论 -
剑指offer系列(7)——旋转数组的最小数字
题目要求如下: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。这个题的突破口是要发现一个这种排序数组的一个特点:即旋转将数组分成了两个部分的小数组,而后面这个小数组的每个值小于前面的小数组(这里不考虑特殊情况,默认为排序好的递增数组,且原创 2017-12-18 13:11:04 · 177 阅读 · 0 评论 -
剑指offer系列(6)——用两个栈实现队列
题目要求如下: 用两个栈实现一个队列。请实现他的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。题目要求要用两个栈实现队列的两个功能:队列尾部插入和队列头部删除。下面分别阐述这两个方面。尾部插入,即将新的元素插入到队列的尾部,队列具有FIFO即先进先出的特性,而栈具有LIFO特性,因此如果我们想实现队列,只需进行两次入栈出栈操作,即可将LI原创 2017-12-18 12:48:25 · 188 阅读 · 0 评论 -
字符串相似度算法
字符串相似度算法 编辑距离算法解析原创 2017-08-14 17:20:31 · 29410 阅读 · 8 评论 -
剑指offer系列(1)——单例模式实现
在剑指offer系列,我将用java实现这本书里的面试题,这是剑指offer的第一个面试题,实现单例模式。 java实现单例模式主要有两种方式:饿汉式和懒汉式,下面是两种实现: 懒汉式:public class Singleton { private static Singleton single = null; private Singleton(){原创 2017-10-14 15:53:07 · 214 阅读 · 0 评论 -
剑指offer系列(2)——二维数组中的查找
题目如下: 在一个二维数组中,每一行都按照从左到右递增的顺序排序。每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例如下: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 当查找数字7时,返原创 2017-10-15 22:44:08 · 177 阅读 · 0 评论 -
剑指offer系列(3)——替换空格
题目:请实现一个函数,把字符串的每个空格替换成“%20”。例如输如:“We Are Happy”,则输出“We20%Are20%Happy”。第一种方法是一种时间复杂度为O(n^2)的方法,即每碰到一个空格就替换,这种想法的缺点很明显,每次移动都需要移动后面所有的字符,为了减少字符的移动次数,我们可以从后往前替换空格。第二种方法是一种时间复杂度为O(n)的方法,即用两边遍历,第一遍遍历整个字符数组,原创 2017-11-09 21:36:05 · 241 阅读 · 0 评论 -
剑指offer系列(4)——从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。因为我们需要使最后一个节点首先输出,但我们遍历普通链表时只能从第一个节点开始,因此这是典型的后进先出模式,因此我们可以用栈来实现,因此我们也可以用递归来实现。这里我用栈来实现:public class LinkedFromTailToHead { static class ListNode{ //内部节点类原创 2017-11-09 22:13:00 · 188 阅读 · 0 评论 -
剑指offer系列(8)——斐波那契数列
题目如下: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下: 本题看上去较为简单,只需根据斐波那契数列的表达式编程即可:第一次写出的代码如下:private static long findFibonacci(int number) { // TODO Auto-genera原创 2017-12-20 13:02:45 · 506 阅读 · 0 评论 -
剑指offer系列(5)——重建二叉树
题目要求如下: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历{4,7,2,1,5,3,8,6},则重建出图2.6所示的二叉树并输出它的头结点。题目的意思是二叉树已知前序中序遍历,要求重建出这个二叉树,与之相似的题目还有已知前序中序遍历求后根序遍历等等,这些题原创 2017-12-12 12:24:45 · 316 阅读 · 0 评论 -
剑指Offer系列(16)——合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。例如输入 链表1 :1->3->5->7链表2:2->4->6->8,则结果为1->2->3->4->5->6->7->8 这里我介绍两种写法,其实两种写法思路是一样的,只不过第二中解法将循环写成了递归,这样看起来漂亮的多,不...原创 2018-11-15 17:35:11 · 147 阅读 · 0 评论