![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
从入门到精通,一直在学习
琛cc
这个作者很懒,什么都没留下…
展开
-
剑指offer:数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。示例:输入:2,3输出:8.0000分析:该题使用递归求解。需要分情况讨论:0次方,则返回1;1次方,返回该数本身; 偶数次方:递归实现相乘 奇数次方:若大于零,则分两部分递归相乘,再乘以该数本身; ...原创 2020-11-09 22:08:36 · 124 阅读 · 0 评论 -
剑指offer:矩形覆盖
题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析:典型的递归问题,n==1时,只有一种方法;n==2时,有两种方法。实现:public static int RectCover(int target){ if(target < 1){ return 0; } if(target==1 || target==2){原创 2020-11-09 21:13:49 · 84 阅读 · 0 评论 -
剑指offer:跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析:使用递归可以很简单的解决该问题。 一级台阶,只有一种跳法;两级台阶,则有两种跳法。此为递归结束的条件。实现:/** * 跳台阶,一次可以跳一阶也可以跳两阶 * @param target 台阶的总数 * @return */ public static int JumpFloor(int targ...原创 2020-11-09 21:00:43 · 68 阅读 · 0 评论 -
剑指offer:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。public static int minNumberRotateArray(int[] array){ if(array.length==0){ return Integer.MAX_VALUE; } ...原创 2020-11-09 20:52:09 · 95 阅读 · 0 评论 -
剑指offer:用两个栈来实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析:一般都是以下方法实现入队操作只需要在一个栈中执行push操作即可;出队操作,需要将栈1中的元素加入到栈2中,再执行pop操作;若栈2为空,出队操作就需要转移元素,若不为空直接出栈即可。实现:class myQueue{ Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer>原创 2020-11-09 16:28:59 · 71 阅读 · 0 评论 -
剑指offer:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。示例:输入:前序遍历:1, 2, 3, 4, 5, 6, 7中序遍历:3, 2, 4, 1, 6, 5, 7输出:1, 2, 5, 3, 4, 6, 7分析:前序遍历的第一个节点为二叉树的根节点,找到根节点在中序遍历数组中的位置,则前半部分就原创 2020-11-09 16:06:59 · 153 阅读 · 0 评论 -
剑指offer:从尾到头打印链表
题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。实现:方法一:利用堆栈结构的先进后出的特点实现public static ArrayList<Integer> printListFromTailToHead1(ListNode listNode) { ListNode temp = listNode; Stack<Integer> stack = new Stack<>(); ArrayL原创 2020-11-09 15:09:12 · 81 阅读 · 0 评论 -
剑指offer:二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:在以下二维数组中查找数字 7 ,返回值为true;查找 3 返回值为 false。分析:方法一:首先将target与二维数组第一行比较,当target大于,某一数据时停止比较,记录当前位置,然后从当前位置倒着依次与target进行比较。 public static boolean原创 2020-11-09 14:19:30 · 77 阅读 · 0 评论 -
斐波那契查找算法
则斐波那契查找算法的代码实现如下所示://斐波那契查找算法//以 arr = {1,8,10,89,1000,1234} 为例public static int FiboSearch(int[] arr,int fidValue){ int low = 0; int high = arr.length-1; // high = 5 int mid = 0; int midValue = 0; int k = 0;//菲波那切数列分割数值的...原创 2020-11-03 10:35:02 · 311 阅读 · 0 评论 -
冒泡、选择、插入算法实现及算法分析
1、冒泡排序只涉及相邻元素比较和交换操作,每轮确定一个元素的位置。(升序)代码实现如下:这里对原始的冒泡排序进行了优化,使用flag来标记在每一轮中是否进行了数据交换,如果在某一轮没有进行数据交换,说明数据已经是有序的,不需要再进行下一轮比较了。public void bubbleSort(int[] array){ int len = array.length; if(len<=1) return; for (int i = 1;原创 2020-08-04 11:52:40 · 222 阅读 · 0 评论