算法基础
孙硕SunShuo
这个作者很懒,什么都没留下…
展开
-
用两个栈来实现一个队列()
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。package offerppp;import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new S原创 2016-08-29 19:27:01 · 339 阅读 · 0 评论 -
跳台阶问题——递归和循环
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路每次可以跳一级或者两级,那么当有1级台阶的话,有1中跳法,2级台阶就有2种,3级台阶的话就要3种,4级台阶有5种。所以能看出来这是一个斐波那契数列。或者这样想,一个n级的台阶,如果第一次跳1级,那么剩下了(n-1)级台阶,跳法是f(n-1),如果第一次跳2级台阶,...原创 2019-02-19 20:44:05 · 319 阅读 · 0 评论 -
输出斐波那契数列的第n项
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39考察知识点递归和循环斐波那契数列简介斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5...原创 2019-02-18 16:56:23 · 4745 阅读 · 0 评论 -
旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。本题知识点: 查找思路如果从头到尾的遍历数组,找到最小的元素,这种算法的时间复杂度是O(n),不采用这种方式...原创 2019-02-18 15:10:12 · 106 阅读 · 0 评论 -
剑指Offer_编程题——替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。考察知识点:时间限制:1秒 空间限制:32768K本题知识点: 字符串思路最简单的方法是使用replaceAll(" ", "%20")这个函数,但是本题考察的是字符串的操作,所以不用这个函数。思路:1)对给定的字符...原创 2018-12-18 16:58:47 · 159 阅读 · 0 评论 -
二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。本题知识点查找时间限制:1秒空间限制:32768K思路思路1:因为数组是横线和纵向有序的,所有可以从右上角开始找。如果target(要寻找的目标值)正好是右上角的值value,直接返回...原创 2018-12-18 10:01:13 · 112 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。本题知识点: 链表思路方案1:链表有节点,每个节点又指向下一个节点,题目要求从尾到头打印链表的值,那么“后进先出”的栈是可以做到的。有栈的思想,不妨也可以试用递归来实现。递归需要有一个终止条件,这个终止条件就是传进来的链表节点不是空,用图描述大概如下:先调用fucn(1),然后递归调用该方法,这样,func(2),...原创 2018-12-23 13:25:27 · 108 阅读 · 0 评论 -
选择排序
选择排序选择排序是简单的排序,基本思想就是选择找到数组中最小的元素,与第一个元素交换,如果第一个元素最小,就自己与自己交换。然后在从剩下的元素中找到最小的元素和第二个元素交换,如此下去,一直到整个数组有序。概括来说就是不断的寻找最小的元素。核心代码:public static void sort(String[] a) { int N = a.length; for原创 2017-07-27 22:23:37 · 184 阅读 · 0 评论 -
根据前序遍历和中序遍历恢复二叉树(附代码)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路: 二叉树的根可以根据前序遍历确定,即前序遍历的第一个节点是根节点,题中的1是根节点,在中序遍历中,根节点前面的节点是二叉树的左子树,根节点后面原创 2016-08-25 19:47:00 · 1335 阅读 · 0 评论 -
变态跳台阶(JAVA)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。递归思路如果有1级台阶,跳法为f(1) = 1;如果有2级,第一次跳1级,剩下1级台阶有f(1)种跳法,或者一次跳2级(n=2),共有f(2)=f(1)+1种;如果有3级,加入第一次跳1级,剩下(n-1)即(3-1=2)级有f(2)种跳法,加入一次跳2级,剩下(n-2)即...原创 2019-02-19 21:16:53 · 161 阅读 · 0 评论