JZ9 用两个栈实现队列
JZ10 斐波那契数列
JZ11 旋转数组的最小数字
文章目录
JZ9 用两个栈实现队列
题目描述
思路详解
两个栈实现队列的想法很简单,当我们入栈的时候直接入栈就好了,出栈的时候如果第二个栈不为空的话,直接把第一个栈的所有元素出栈入栈到第二个栈,然后第二个栈再出栈就是原本的入栈顺序了。
其实思想就是倒腾了一下,第一个栈先进的后出,第二个栈也是先进后出,可是宏观看第二个栈先入的是你后输入的,所以出栈的时候就是输入的顺序了。
代码与结果
import java.util.\*;
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.size() <= 0){
while(stack1.size() != 0){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
JZ10 斐波那契数列
题目描述
思路详解
斐波那契数列很常见,那么本题也是入门级别的题,考察了递归的使用。
注意特殊情况的判断就可以了。
代码与结果
public class Solution {
public int Fibonacci(int n) {
if(n == 1 || n == 2) return 1;
else if(n > 2)
return Fibonacci(n - 1) + Fibonacci(n - 2);
return 0;
}
}
JZ11 旋转数组的最小数字
题目描述
思路详解
本题的首先思想肯定是暴力破解,但是那样时间复杂度比较高。
这里采用二分法进行查找,也是二分查找的简单应用,详解上代码哦。
代码与结果
import java.util.\*;
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
// 特殊情况判断
if (array.length== 0) {
return 0;
}
// 左右指针i j
int i = 0, j = array.length - 1;
// 循环
while (i < j) {
// 找到数组的中点 m
int m = (i + j) / 2;
// m在左排序数组中,旋转点在 [m+1, j] 中
if (array[m] > array[j]) i = m + 1;
// m 在右排序数组中,旋转点在 [i, m]中
else if (array[m] < array[j]) j = m;
// 缩小范围继续判断
else j--;
}
// 返回旋转点
return array[i];
}
![img](https://img-blog.csdnimg.cn/img_convert/2fa203c8a52b72f11cd67b2f8283a69d.png)
![img](https://img-blog.csdnimg.cn/img_convert/60d57bd6c31a076011969c0610dc6ea1.png)
![img](https://img-blog.csdnimg.cn/img_convert/a5b8a27142aa9ec9f63ecc127666cc4c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**