数据结构与算法分析
主要介绍数据结构和算法分析的一些知识,编程语言主要是Java.
FireOct
移步至 http://sixteen.site
展开
-
剑指Offer-斐波那契数列
斐波那契数列题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 解题思路: 斐波那契数列:0、1、1、2、3、5、8、13、21、34、…… 这里注意: 第0项:0; 第1项:1; 第2项:1; 第3项:2; 。。。下面是我的Java源代码public class Solution { public int Fibonacci原创 2015-08-29 00:13:16 · 1350 阅读 · 0 评论 -
剑指Offer-二叉树的镜像
二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 解题思路: 将结点的左右子树转换,然后递归其左右子树继续进行。我的Java代码如下:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right =原创 2015-08-29 00:12:25 · 1426 阅读 · 0 评论 -
剑指Offer-树的子结构
树的子结构 题目描述 输入两颗二叉树A,B,判断B是不是A的子结构。 解题思路: 先判断A的根结点是否与B的树根相同,若相同,则遍历B的同时遍历A,判断是否相似。 否则判断A的左子树是否与B的树根相同,若相同,则遍历B的同时遍历A的左子树,判断是否相似。 同理A的右子树也一样的方法判断。 注意一个问题,如果两个都为null,或者root2为null,则root2不属于ro原创 2015-08-29 00:11:44 · 1175 阅读 · 0 评论 -
剑指Offer-数值的整数次方
数值的整数次方 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 解题思路: 注意判断输入的int类型的整数exponent是正数还是负数,0; 如果是正数,使用循环来让base自身乘exponent次,直接返回; 如果是负数,按照正数的方法得到结果result,然后返回1.0/result,、; 如果是原创 2015-08-29 00:11:04 · 1304 阅读 · 0 评论 -
剑指Offer-用两个栈实现队列
用两个栈实现队列 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路: 利用一个栈来作为暂时存储的栈,类似于汉诺塔问题,可以根据下图思考一下, 我的Java源代码: import java.util.Stack;public class Solution { Stack<Integer> stack1 = new原创 2015-08-29 00:10:02 · 1231 阅读 · 0 评论 -
剑指Offer-变态跳台阶
变态跳台阶题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路: 仔细分析一下可以发现问题数组的第n个的结果为:2^(n-1) 注意分析一下: n=0,return 0; n=1;有1种方法; n=2;有2种方法; n=3;有4种方法; 。。。 我的Java源代码: public cl原创 2015-08-27 21:31:12 · 574 阅读 · 0 评论 -
剑指Offer-跳台阶
跳台阶题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路: 其实仔细分析一下,可以发现这是一个类似斐波那契数列的数组,数组为:0,1,2,3,5,8,… 下面是我的Java源代码实现: public class Solution { public int JumpFloor(int target) {原创 2015-08-27 21:30:38 · 586 阅读 · 0 评论 -
剑指Offer-反转链表
反转链表题目描述: 输入一个链表,反转链表后,输出链表的所有元素。 解题思路: 这和之前的一道题“从尾到头打印链表”方法上有一些类似,我这里也是借助栈来实现的。 下面是我的Java源代码: /*public class ListNode { int val; ListNode next = null; ListNode(int val) {原创 2015-08-27 21:29:22 · 644 阅读 · 0 评论 -
剑指Offer-合并两个排序的链表
合并两个排序的链表题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路: 其实就是采用比较大小,然后使用尾插法进行构建合并链表。 我的Java代码如下: /*public class ListNode { int val; ListNode next = null; ListNode(int v原创 2015-08-27 21:24:53 · 568 阅读 · 0 评论 -
剑指Offer-链表中倒数第k个结点
链表中倒数第k个结点 题目描述: 输入一个链表,输出该链表中倒数第k个结点。 解题思路: 采用快慢指针方法,先让a指针前进k步,然后ab指针一同前进,当a指针为nu原创 2015-08-27 21:23:49 · 618 阅读 · 0 评论 -
剑指Offer-重建二叉树
重建二叉树题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题思路: (1)如果前序遍历为空或中序遍历为空或节点个数小于等于0,返回NULL。 (2)创建根节点。前序遍历的第一个数原创 2015-08-27 21:22:58 · 528 阅读 · 0 评论 -
剑指Offer-从头到尾打印链表
从尾到头打印链表题目描述: 输入一个链表,从尾到头打印链表每个节点的值。 解题思路:1.这里借助栈,遍历链表的时候将链表节点的值push进栈,遍历结束后,将栈中内容pop出ArrayList中。 2.这里还有使用头插法将链表逆序,然后遍历值存储在ArrayList中。 下面是1的源代码: /*** public class ListNode {* int val原创 2015-08-27 21:22:21 · 749 阅读 · 0 评论 -
剑指Offer-二维数组中的查找
二维数组中的查找题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路:借http://www.cnblogs.com/zhuyf87/archive/2013/03/01/2938013.html博客一张图,从右上角开始分析,思路如下: 源代码如下: p原创 2015-08-27 21:21:09 · 563 阅读 · 0 评论 -
LeetCode102-Binary-Tree-Level-Order-Traversal
LeetCode 102 : Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level). For example: Given binary tree原创 2015-08-27 21:20:23 · 550 阅读 · 0 评论 -
LeetCode145-Binary-Tree-Postorder-Traversal
LeetCode 145 : Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes’ values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return [3,2原创 2015-08-27 21:19:53 · 607 阅读 · 0 评论 -
LeetCode144-Binary-Tree-Preorder-Traversal
**LeetCode 144 : Binary Tree Preorder Traversa**l Given a binary tree, return the preorder traversal of its nodes’ values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return [1原创 2015-08-27 21:19:09 · 623 阅读 · 0 评论 -
编程之美-编程判断两个链表(可能含环)是否相交以及相交的第一个结点
第三章 3.6 扩展题 扩展1 : 如何判断两个链表(含环)是否相交 扩展2 : 如何求出两个链表相交的第一个结点 假设两个链表分别为A,B链表 扩展1 :如何判断两个链表(含环)是否相交 解题思路: (1)先判断AB链表是否含有环,如果不含有环则按照之前的文章 编程之美-判断两个链表是否相交 | Pan Hai nan’Blog 进行; (2)如果AB链表中有一个链表含有环,而另一个原创 2015-08-27 21:18:26 · 849 阅读 · 0 评论 -
编程之美-判断两个链表是否相交
第三章 3.6 编程判断两个链表是否相交 问题详细描述: 给出两个单向链表的头指针(如图3-8所示),比如h1、h2,判断这两个链表是否相交。这里为了简化问题,我们假设两个链表均不带环。 这里直接将编程之美一书中的解释搬过来,如下。分析与解法 这样的一个问题,也许我们平时很少考虑。但在一个大的系统中,如果出现两个链表相交的情况,而且释放了其中一个链表的所有节点,那样就会造成信息的丢原创 2015-08-27 21:17:20 · 756 阅读 · 0 评论 -
编程之美-从无头单链表中删除节点
第三章 3.4 从无头单链表中删除节点 问题详细描述: 假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该结点从单链表中删除解题思路: 按照题意需要删除A结点,但是A结点不是头结点,我们也不能得到A结点的前一个结点。 这时我们换一下思路,我们来对B结点做点文章,通过将B节点的值赋值给A结点,然后将A结点的next指针指向B结点的ne原创 2015-08-27 21:16:34 · 853 阅读 · 0 评论 -
LeetCode173-Binary Search Tree Iterator
LeetCode 173 : Binary Search Tree Iterator Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.Calling next() will return the next small原创 2015-08-27 21:15:55 · 753 阅读 · 0 评论 -
LeetCode110-Balanced Binary Tree
LeetCode 110 : Balanced Binary TreeGiven a binary tree, determine if it is height-balanced.For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subt原创 2015-08-27 21:15:21 · 748 阅读 · 0 评论 -
编程之美-字符串移位包含的问题
第三章 3.1 字符串移位包含的问题问题详细描述: 给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位得到的字符串包含。输入输出示例: 给定s1=”AABCD”和s2=”CDAA”,返回true; 给定s1=”ABCD”和s2=”ACBD”,返回false。 对于编程之美中使用C语言的解法请参见这一篇文章,讲的很详细 地址:字符串移位包含的问题 - 丫坏孩子 - 博客园原创 2015-08-27 21:13:36 · 1325 阅读 · 0 评论 -
算法分析-如何实现字符串的反转
问题:将一个句子中的单词进行反转,例如:“how are you”,进行反转后的结果为“you are how”。 解题思路:将这个句子进行两次反转操作即可。1)对整个字符串进行字符反转,反转结果“uoy era woh”; 2)接下来对每个单词进行字符反转,结果就是“you are how”。源代码:/* 问题:将一个句子中的单词进行反转,例如:“how are you”,进行反转后的结果为原创 2015-08-27 21:11:25 · 1454 阅读 · 0 评论