剑指Offer_编程题(用两个栈实现队列/旋转数组的最小数字(O(n) + 二分O(lgn))/斐波那契数列/跳台阶)
剑指Offer_编程题
5、用两个栈实现队列
时间限制:1秒 空间限制:32768K 热度指数:466923
本题知识点: 队列 栈
题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:用一个栈push,另一个栈分情况,1.空,将s1所有的元素放入弹出一个,2.非空,弹出一个。
class Solution
{
public:void push(int node) {stack1.push(node);}int pop() {if(!stack2.empty()){int u=stack2.top();stack2.pop();return u;}else{while(!stack1.empty()){stack2.push(stack1.top());stack1.pop();}if(!stack2.empty()){int u=stack2.top();stack2.pop();return u;}else return NULL;}}private:stack<int> stack1;stack<int> stack2;
};
6、旋转数组的最小数字(O(n) + 二分O(lgn))
时间限制:3秒 空间限制:32768K 热度指数:655052
本题知识点: 查找 数组
题目描述:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:耍赖写法??sort 输出,不过sort复杂度O(nlogn)。直接找的话O(n)
sort O(nlogn) (emmmm)
class Solution {
public:int minNumberInRotateArray(vector<int> rotateArray) {if(rotateArray.size()==0) return 0;sort(rotateArray.begin(),rotateArray.end());return rotateArray[0];}
};
直接找 O(n)
class Solution {
public:int minNumberInRotateArray(vector<int> rotateArray) {if(rotateArray.size()==0) return 0;int len=rotateArray.size();for(int i=0;i<len-1;i++){if(rotateArray[i]<=rotateArray[i+1])continue;else return rotateArray[i+1];}return rotateArray[0];}
};
二分O(lgn) 瞎搞搞搞出来了,因为非减序列就会有一些重复的值,这里有点麻烦,就是感觉好像这样可以,然后调调调出来了。
class Solution {
public:int minNumberInRotateArray(vector<int> rotateArray) {int len=rotateArray.size();if(len==0) return 0;int l=0,r=len-1;while(l<r){int mid=(l+r)/2;if(rotateArray[l]<=rotateArray[mid]) l=mid+1;else r=mid-1;}int ans=min(rotateArray[l],rotateArray[r]);int le=0,ri=len-1;while(le<ri){int mid=(le+ri)/2;//cout<<le<<" "<<mid<<" "<<ri<<endl;if(rotateArray[ri]>=rotateArray[mid]) ri=mid;else le=mid+1;}ans=min(ans,min(rotateArray[le],rotateArray[ri]));return ans;}
};
7、斐波那契数列
时间限制:1秒 空间限制:32768K 热度指数:596140
本题知识点: 递归
题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
思路:没啥,n挺小的
class Solution {
public:int Fibonacci(int n) {long long f[3];f[0]=0,f[1]=1;f[2]=1;if(n<=2) return f[n]; for(int i=3;i<=n;i++)f[i%3]=f[(i-1)%3]+f[(i-2)%3];return f[n%3];}
};
8、跳台阶
时间限制:1秒 空间限制:32768K 热度指数:455201
本题知识点: 递归
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:同上 f(n)=f(n-1)+f(n-2) ; n=1 ans=1;n=2 ans=2;
class Solution {
public:long long f(int num){if(num==1) return 1;if(num==2) return 2;return f(num-1)+f(num-2);}int jumpFloor(int number) {long long ans=f(number);return ans;}
};
剑指Offer_编程题(用两个栈实现队列/旋转数组的最小数字(O(n) + 二分O(lgn))/斐波那契数列/跳台阶)相关推荐
- 牛客网 c++ 剑指Offer_编程题 第五题用两个栈实现队列
前言: 牛客网 c++ 剑指Offer_编程题 第五题用两个栈实现队列 题目: **这个题目不难,但是我感觉题目出得奇怪,刚开始没理解要干啥 我一个队列就能实现他要的功能为啥要两个 队列 queue ...
- 剑指offer系列-09.用两个栈设计队列
剑指offer系列第09题.用两个栈设计队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整 ...
- 41【C#】斐波那契(Fibonacci)数列的第一个和第二个数分别为1和1 从第三个数开始,每个数等于其前两个数之和(1,1,2,3...)编写一个程序输出斐波那契数列中的前20个数,
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 剑指Offer对答如流系列 - 用两个栈实现队列
面试题8:用两个栈实现队列 一.题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 二 ...
- 编程题练习 两个栈实现队列
两个栈实现队列 1.判断队列为空: 当栈s1 和 s2都为空时,那么队列为空 2.入队操作: 直接将数据加入到s1栈中 3.出队操作:当 s2 栈不为空的时候, s2 栈直接执行出栈操作就可以得到出队 ...
- 剑指offter-面试题7.用两个栈实现队列
题目.用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead分别完成在对尾插入节点和在队头删除节点. 该队列类模板如下: 1 template <ty ...
- 剑指Offer_编程题_22
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 剑指Offer_编程题 不用加减乘除做加法
不用加减乘除做加法 时间限制:1秒 空间限制:32768K 热度指数:81997 算法知识视频讲解 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 首先,十进 ...
- 【Java】剑指Offer_编程题_机器人的运动范围
题目链接:https://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8 题目描述 地上有一个m行和n列的方格.一 ...
- 剑指Offer_编程题09:变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 牛客网:链接 我们使用数学归纳法不难发现,跳法f(n)=2^(n-1). # -* ...
最新文章
- Android开发问题集锦
- 字节跳动Java高级工程师:java队列实现停车场出入
- python【蓝桥杯vip练习题库】ADV-290成绩排序
- linux技术工程师,LINUX系统工程师技术(Engineer)-------第四天
- MATLAB编程经典程序 素数的判断,求0~100素数之和
- undefined reference to `cv::VideoCapture::VideoCapture()'
- python3 批量定义多个变量_Python3 基本数据类型详解
- MongoDB的查询语法和SQL的SELECT语法做对比
- oracle协议适配器错误tns,ORA-12560: TNS: 协议适配器错误 常见原因
- loadrunner——关联
- 使用Screaming Frog SEO Spider 如何查找断开的链接
- pcshare远控软件编译过程
- DMS专线联通外网测试
- 代理模式(委托模式)— 结构型
- 修改主分区表给U盘分区
- React innerHTML
- Spring Boot 集成 Elasticsearch
- PVTV2--Pyramid Vision TransformerV2学习笔记
- 计算机DVD驱动禁用怎么恢复,win7电脑中的DVD驱动无法打开怎么办?
- Unity 升级版本后Shader导致崩溃