您的位置:js12345金沙官网登入 > 网络编程 > 剑指offer第二天

剑指offer第二天

2019-10-02 10:01

本文按照牛客网的顺序,牛客网剑指offer刷题网址:https://www.nowcoder.com/ta/coding-interviews

剑指offer5-8用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。/*思路:入队:栈1直接入栈,出队:栈空的话就遍历栈1将其入栈2,再出栈,否则直接出栈*/public class Solution {Stack<Integer> stack1 = new Stack<Integer>();Stack<Integer> stack2 = new Stack<Integer>();public void push {stack1.push;}//出队public int pop() {if (stack2.empty {while (!stack1.isEmpty {stack2.push(stack1.pop;}return stack2.pop();} else {return stack2.pop();}}}旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。public int minNumberInRotateArray(int [] array) {int left=0;int right=array.length-1;while(left<right){//6712345int mid= left + (right - left) / 2;//旋转后可以分为左右两个部分,采用二分法//如果中间的数比右边最大的大就意味着在右边了if(array[mid]>array[right]){left=mid+1;}else if(array[mid]==array[right]){ //相等的话就把右边左移一下right--;}else if(array[mid]<array[right]){ //小于就在左边right=mid;}}return array[left];}斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39public int Fibonacci { if{ return 0; }if(n==1||n==2){return 1;}else{return Fibonacci+Fibonacci;}}跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。public int JumpFloor(int target) {if(target==1){return 1;}elseif(target==2){return 2;}else {return JumpFloor+JumpFloor;}}变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。public int JumpFloorII(int target) { //f+f //f+f=2*f以此类推f=2*fif(target==1){return 1;}else{return 2*JumpFloorII;}}矩阵覆盖我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?public int RectCover(int target) {if(target==0){return 0;}if(target == 1){return 1;}else if(target == 2){return 2;}else{return RectCover()+RectCover;}}

本文涉及的题目:1、用两个栈实现队列2、旋转数组中的最小数字3、斐波那契数列4、跳台阶5、变态跳台阶6、矩形覆盖

问题描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

思路解析定义两个stack,分别是stack1和stack2,队列的push和pop是在两侧的,push操作很简单,只需要在stack1上操作,而pop操作时,先将stack1的所有元素push到stack2中,然后stack2的pop返回的元素即为目标元素,然后把stack2中的所有元素再push到stack1中。

代码实现java

import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push { stack1.push; } public int pop() { int temp; while(!stack1.empty{ temp = stack1.pop(); stack2.push; } int res = stack2.pop(); while(!stack2.empty{ temp = stack2.pop(); stack1.push; } return res; }}

python

class Solution: def __init__: self.stack1 = [] self.stack2 = [] def push(self, node): # write code here self.stack1.append def pop: # return xx if not self.stack1: return None while self.stack1: self.stack2.append(self.stack1.pop res = self.stack2.pop() while self.stack2: self.stack1.append(self.stack2.pop return res

问题描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

思路解析从头到尾两两相邻元素进行比较进行,如果前面一个元素大于后面一个元素,则返回后面一个元素。如果从头到尾都没有满足条件的元素,则返回第一个元素。

代码实现java

import java.util.ArrayList;public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length==0){ return 0; } for(int i=0;i<array.length-1;i++){ if(array[i] > array[i+1]){ return array[i+1]; } } return array[0]; }}

python

class Solution: def minNumberInRotateArray(self, rotateArray): # write code here if not rotateArray: return 0 for i in range(len(rotateArray)-1): if rotateArray[i] > rotateArray[i+1]: return rotateArray[i+1] return rotateArray[0]

问题描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39

思路解析只需要定义两个整形变量,b表示后面的一个数字,a表示前面的数字即可。每次进行的变换是:temp = a,a=b,b=temp + b

代码实现java

public class Solution { public int Fibonacci { if  return 0; int a=1,b = 1; int temp; for(int i=2;i<n;i++){ temp = a; a = b; b = temp + b; } return b; }}

python

# -*- coding:utf-8 -*-class Solution: def Fibonacci: # write code here if n<=0: return 0 a = b = 1 for i in range: a,b = b,a+b return b

本文由js12345金沙官网登入发布于网络编程,转载请注明出处:剑指offer第二天

关键词:

  • 上一篇:没有了
  • 下一篇:没有了