该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-07
记得是哪个面试题里的,这里只想到一个简单的方法,大家看看对不对。。。
/** * @Project: Test * @File: org.coffeesweet.test01.Test19.java * @Author: coffeesweet * @Date: 2011-6-7 * @Description: 2011 coffeesweet Inc. All rights reserved. */ package org.coffeesweet.test01; import java.util.LinkedList; /** * @author coffeesweet * */ public class Test19 { public static void main(String[] args){ Long[] numList = new Long[]{1L,5L,3L,2L,1L,5L,7L,6L,7L,8L,-1L,-5L,2L,7L,2L,3L,5L,9L,9L}; Test19 t19 = new Test19(); MaxNumStack mns = t19.new MaxNumStack(); for(int i=0;i<numList.length;i++){ mns.push(numList[i]); } System.out.println(mns.pop()); System.out.println(mns.pop()); System.out.println(mns.top()); System.out.println(mns.getMaxNum()); } private class MaxNumStack{ private LinkedList<Long> stackList = new LinkedList<Long>(); private LinkedList<Long> maxNumList = new LinkedList<Long>(); public void push(Long num){ stackList.addLast(num); if(maxNumList.isEmpty()||(maxNumList.getLast().compareTo(num)<1)){ maxNumList.addLast(num); } } public Long pop(){ if(stackList.isEmpty())return null; if((maxNumList.getLast().compareTo(stackList.getLast())<1))maxNumList.removeLast(); return stackList.removeLast(); } public Long top(){ return stackList.getLast(); } public boolean isEmpty(){ return stackList.isEmpty(); } public Long getMaxNum(){ if(maxNumList.isEmpty())return null; return maxNumList.getLast(); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-06-07
楼主你写的应该不好用。。。。
|
|
返回顶楼 | |
发表时间:2011-06-07
最后修改:2011-06-07
构建栈的时候用了2个List
求最大值应该很简单的吧,遍历一次就可以啊。 |
|
返回顶楼 | |
发表时间:2011-06-07
如果非要这么做,多维护一个list还不如只保持最后一个最大值,呵呵~
|
|
返回顶楼 | |
发表时间:2011-06-07
楼主要求时间复杂度为O(1),按照楼主的思路,维护两个list,一个做stack,另一个维护一个大小顺序,这样每次插入的时候需要对存大小顺序的list做修改。(用插入排序,时间复杂度O(log2n)小于n).这样可以满足取该栈中最大数的方法复杂度为O(1).缺点:消耗2倍内存。
再者就是用一个变量记最大值,缺点,不管出栈入栈都要维护这个变量。入栈比较一下就行,出栈如果是最大值,则需要遍历数组找出新的最大值附给变量。优点:插入比上面快,内存暂用小。缺点:出栈可能需要排序。 |
|
返回顶楼 | |
发表时间:2011-06-09
构建栈为什么不用数组?
|
|
返回顶楼 | |
发表时间:2011-06-09
Nanigac 写道 如果非要这么做,多维护一个list还不如只保持最后一个最大值,呵呵~
这个方法很好啊 |
|
返回顶楼 | |
发表时间:2011-06-09
和我想的一致
|
|
返回顶楼 | |
发表时间:2011-06-09
栈的push跟pop是要加锁的。。。
|
|
返回顶楼 | |
发表时间:2011-06-09
好吧,我点错了投票
linkedlist实现stack 本末倒置。 |
|
返回顶楼 | |