码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer(3)

时间:2020-05-20 00:23:01      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:throw   turn   自己   直接   另一个   else   做什么   node   strong   

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

我的想法:

栈是先进后出,队列是先进先出。两个完全相反的操作,只能将两个栈想象成“倒豆子”,倒来倒去的完成操作。如果想高阶一些的办法,既然有俩个栈,让一个管push另一个负责pop,岂不是有一种自己当老板,因材施教,合理分工的感觉?

但是我一时想不到怎么完美的分工,二时没忍住就看了标准答案~

答案的解析思路如下:

一个句号是因为把前面的解析省略了。因为我想给你我的思考。你仔细想想,简单方法下,队列的pop操作需要我们做什么?把队列push到栈1,又把栈1pop出来后push入栈2,此时的栈2是什么??

是一个可以正常pop的队列呀!!分工出来了!

栈1负责push操作,

if 遇到队列的pop:找栈2:

  if 栈2非空 ——》 直接pop

  if 栈2 == 空 ——》 将栈1内容除了最下面的数据全部push进栈2,将栈1最底的数据pop出来

我们做到了!成功想到了这个最轻便的方法

 

Stack<Integer> stackIn = new Stack<>();

Stack<Integer> stackOut = new Stack<>();

 

public void push(int node){

  stackIn.push(node);

}

public int pop(){

if(stack1.isEmpty() && stack2.isEmpty())
throw new RuntimeException("Queue is empty!");

  if (!stackOut.isempty()){

    stackOut.pop();

  } else{

    int data = 0;

    while(!stackIn.isempty()){ //在这里我不知如何让栈内只剩一个元素,如果计算栈内数据量或循环里添加if 好像开销更大,怎么做呢??

      data = stackIn.top();

      stackIn.pop();

      stackOut.push(data);

    }

  }

  return stackOut.pop();

}

 

问题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。

例如 {3,4,5,1,2}是{1,2,3,4,5} 数组旋转后的样子,1是最小值

 

想法:永远和第一个数字做对比,比第一个数字大说明在当前mid的右边,从mid+1到high,比第一个数字小说明在low到mid中。

public int searchMin(int [] array){

  int root = array[0];

  int low = 1

  int high = array.length -1;

  int mid = array.length/2;

  if(array.length == 0)  {return 0;}

  if(array[0] == array[mid])  {return array[0];}

  while(low<high){ //我算了一下,好像low=high的时候就是找到最小值的时候

     if(array[0] < array[mid]) {

    low = mid +1;

    mid = low + (high - low) / 2;}

     if(array[0] > array[mid]){

    high = mid;

    mid = low + (high - low) / 2; }

  }

  return array[low];

}

写的有点乱,这篇是5.19写的。被520日子打扰,真是的。

错了明早起来再改吧,今天先这样啦

剑指offer(3)

标签:throw   turn   自己   直接   另一个   else   做什么   node   strong   

原文地址:https://www.cnblogs.com/cherry-BAIL/p/12920589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!