
算法
Polaris-zlf
不抛弃 不放弃
展开
-
输入一个链表,从尾到头打印链表每个节点的值。
本文以单链表为例进行说明链表中的数据是以结点来表示的,每个结点的构成:元素 + 指针,元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。单链表是由自身元素和指向下一个结点的指针构成。分析:假设该单链表中有两个结点A和BA结点自身值为4,指向下一个结点BB为最后一个结点,自身值为6,指针为null.代码原创 2016-10-11 17:59:08 · 1921 阅读 · 1 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析:栈Stack 自带的方法:public E pop()移除栈顶部的对象,并作为此函数的值返回该对象。 public E push(E item)插入到栈顶部代码如下:import java.util.Stack;/* * 一个队列弹出,然后另一个队列压入原创 2016-11-01 10:11:20 · 268 阅读 · 0 评论 -
反转链表
输入一个链表,反转链表后,输出链表的所有元素。本文考虑的是单链表定义单链表public class ListNode { int val; //自身值 ListNode next = null; //指向下一个节点 ListNode(int val) { this.val = val; }}原创 2016-11-30 15:50:42 · 207 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。计算机中,数值都是以补码的形式保存。原码:就是十进制的数字转换为二进制在计算机中的表示,如正2,二进制表示为0000 0010,-2的二进制表示为1000 0010。前面的一位表示符号位,其中,正数为0,负数为1。反码:正数的反码和原码相同,负数的反码就是保持原有符号位不变,其他位取反。比如:原创 2016-11-15 16:41:59 · 238 阅读 · 0 评论 -
数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析:一看到这个题目,可能我们很容易写出来public double powerWith(double base, int exponent){ double result = 1.0; for(int i = 1;i原创 2016-11-22 11:49:56 · 291 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public class Solution {public void reOrderArray(int [] array) {int[] result = new int[array.length];int原创 2016-11-24 18:33:08 · 236 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)上面所示的两棵二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构。要查找树A中是否存在和树B结构一样的子树,我们可以分两步:第一步在树A中找到和B的根节点的值一样的结点R,第二步再判断树A中以R为根结点的左右子结点的值是不是和树B的左右子结点值一样。原创 2016-12-13 17:19:10 · 243 阅读 · 0 评论 -
合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。首先分析合并两个链表的过程。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。我们继续合并两个链表中剩余的结点。此时链表2的头结点的值小于链表1的头结点的值,因此链表2的头结点的值将是合并剩余结点得到的链表的头结点。我们把这个结点和前面合并链原创 2016-12-08 09:56:56 · 414 阅读 · 0 评论 -
链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。分析:设置两个指针,一个快指针、一个慢指针,快指针和慢指针开始时都指向链表第一个节点,然后让快指针向后走k-1个节点,再让满指针和快指针同时向后走,当快指针指向的下一个节点为空时,慢指针所指向的节点即为所求。本文是考虑的单链表。代码如下://单链表进行考虑public class ListNode { int val;原创 2016-11-28 13:52:50 · 879 阅读 · 0 评论 -
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.给定矩阵: 1 2 3 4 5 6 7 8 9原创 2016-12-29 14:15:38 · 301 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:前序遍历:根节点------->左节点-------->右节点中序遍历:左节点-------->根节点------->右节点在二叉原创 2016-10-20 17:59:00 · 311 阅读 · 0 评论 -
矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析:解题思路:归纳法(列举出n=1,2,3,4,5 总结规律)得到:f(1)=1f(2)=2f(3)=3f(4)=5f(5)=8即:n>2时,f(n)=f(n-1) + f(n-2)原创 2016-11-11 13:28:30 · 258 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如:下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字1,则返回true;如果查找数字5,则返回false。12 3 423 4 734 7 867 8 9原创 2016-09-26 16:05:15 · 346 阅读 · 0 评论 -
旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。最直观的解法就是,从头到尾遍历一次,我们就能找到最小的元素。这种思路的时间复杂度为O(n)。原创 2016-11-04 10:58:10 · 267 阅读 · 0 评论 -
将一个数组变成二叉树
二叉树是每个节点最多有两个子树的树结构。通常子树被称作 “左子树” 和 “右子树”。比如数组:int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9}变为二叉树为:分析:1、首先要定义每一个结点,每一个结点包括自身值,左结点和右结点,实现get、set方法。public class Node {public int原创 2016-10-14 16:07:43 · 9679 阅读 · 3 评论 -
对二叉树进行前序、中序、后序遍历
前序遍历:根节点---->左子树---->右子树中序遍历:左子树---->根节点---->右子树后序遍历:左子树---->右子树---->根节点二叉树为:二叉树相当于双向链表。左右都有结点代码:public class Node {public int data; //自己本身值public Node lef原创 2016-10-14 17:43:52 · 651 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution2 {public String replaceSpace(StringBuffer str) {String str2 = str.toString().原创 2016-09-29 18:11:00 · 236 阅读 · 0 评论 -
栈
栈(stack)又名堆栈,它是限定仅在表头进行插入和删除操作的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。zhan(1)通常称插入、删除的这一端为栈顶(To原创 2016-10-26 17:53:32 · 580 阅读 · 0 评论 -
斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列,又称黄金分割数列;以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)即表示为:原创 2016-11-08 15:29:24 · 441 阅读 · 0 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:这个是有一定规律的,我们可以分析一下一级台阶:f(1)=1二级台阶:f(2)=2三级台阶:f(3)=3四级台阶:f(4)=5五级台阶:f(5)=8通过上面的规律可以得出:从第三个开始,该数等于前两个数之和f(n) = f(n-1) + f(n-2)publ原创 2016-11-09 17:07:08 · 249 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:这个是有一定规律的,我们可以分析一下一级台阶:f(1)=1二级台阶:f(2)=2三级台阶:f(3)=4四级台阶:f(4)=8从第二个开始,该值等于前一个数 * 2public class Solution2 {public int Ju原创 2016-11-09 17:29:49 · 225 阅读 · 0 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7原创 2016-12-20 15:45:28 · 248 阅读 · 0 评论