zoukankan      html  css  js  c++  java
  • interview prepare_que&stk

    1. implement stack use two queues.

     1 #coding:utf-8
     2 class MyStack:
     3     def __init__(self):
     4         self.que1=[]
     5         self.que2=[]
     6        
     7     def push(self,val):
     8         #始终插入que1
     9         self.que1.append(val)
    10         
    11     
    12     def pop(self):
    13         if(len(self.que1)==0):
    14             raise("Empty stack!")
    15         while(len(self.que1)>1):
    16             self.que2.append(self.que1.pop(0))
    17         
    18         res=self.que1.pop(0)
    19         
    20         while(len(self.que2)>0):
    21             self.que1.append(self.que2.pop(0))
    22 
    23         return res
    24 
    25 
    26 stack=MyStack()
    27 stack.push(1)
    28 stack.push(2)
    29 print(stack.pop())
    30 stack.push(4)
    31 stack.push(5)
    32 print(stack.pop())
    33 print(stack.pop())
    34 print(stack.pop())
    35 print(stack.pop())

    2. implement que use two stacks.

     1 class MyQueue:
     2     def __init__(self):
     3         self.stack1=[]    
     4         self.stack2=[]
     5 
     6     def push(self,val):
     7         self.stack1.append(val)
     8     
     9     def pop(self):
    10         if(len(self.stack1)==0):
    11             raise("Empty que!")
    12         
    13         while(len(self.stack1)>1):
    14             self.stack2.append(self.stack1.pop())    
    15         res=self.stack1.pop()
    16         while(len(self.stack2)>0):
    17             self.stack1.append(self.stack2.pop())
    18         return res
    19 
    20 que=MyQueue()
    21 que.push(1)
    22 que.push(2)
    23 print(que.pop())
    24 que.push(3)
    25 que.push(4)
    26 print(que.pop())
    27 print(que.pop())
    28 print(que.pop())
    29 print(que.pop())

    3. min_stack

     1 class MinStack:
     2     def __init__(self):
     3         self.stack=[]
     4         self.minstk=[]
     5     
     6     def push(self,x):
     7         if(len(self.stack)==0):
     8             self.stack.append(x)
     9             self.minstk.append(x)
    10         
    11         tmp=min(self.minstk[-1],x)
    12         self.stack.append(x)
    13         self.minstk.append(tmp)
    14     
    15     def pop(self):
    16         if(len(self.stack)==0):
    17             raise("Empty stack!")
    18         
    19         self.minstk.pop()
    20         return self.stack.pop()
    21 
    22     def get_min(self):
    23         return self.minstk[-1]
    24 
    25 
    26 st=MinStack()
    27 st.push(-2)
    28 print(st.get_min())
    29 st.push(0)
    30 print(st.get_min())
    31 st.push(-5)
    32 print(st.get_min())
    33 print("pop:",st.pop())
    34 print(st.get_min())

    4. valid pop_seq

    class Solution:
        def __init__(self):
            pass
        
        def is_valid(self,push_seq,pop_seq):
            self.push_st=[]
            for i in range(len(push_seq)):
                self.push_st.append(push_seq[i])
                while(len(self.push_st) and self.push_st[-1]==pop_seq[0]):
                    self.push_st.pop()
                    pop_seq.pop(0)
    
            return len(self.push_st)==0
    
    s=Solution()
    push_seq=[1,2,3,4,5]
    pop1=[3,2,5,4,1]
    print(s.is_valid(push_seq,pop1))
    
    
    pop2=[3,1,2,4,5]
    print(s.is_valid(push_seq,pop2))        

    5. simple cal

     1 class Solution:
     2     BEGIN_STATE=0
     3     NUMBER_STATE=1   
     4     OP_STATE=2
     5 
     6     def calculate(self,s):
     7         self.number_st=[]
     8         self.op_st=[]
     9         
    10         num=0;
    11         state=BEGIN_STATE
    12         compute_flag=0
    13         
    14         for u in range(len(s)):
    15             if(s[i]==' '):
    16                 continue
    17             if state==BEGIN_STATE:
    18                  if(s[i]>='0' and s[i]<='9'):
    19                      state=NUMBER_STATE
    20                  else:
    21                      state=OP_STATE
    22                  i-=1
    23             elif state==NUMBER_STATE:
    24                 if(0<=int(s[i]<=9)):
    25                     number=number*10+int(s[i])
    26                 else:
    27                     self.number_st.append(number)
    28                     if(compute_flag==1):
    29                         right,left=self.number_st.pop(),self.number_st.pop()
    30                         res=left+right if(self.op.pop()=="+") else left-right
    31                         self.number_st.append(res)
    32                     number=0
    33                     i-=1
    34                     state=OP_STATE
    35             elif state==OP_STATE:
    36                 if(s[i]=="+" or s[i]=="-"):
    37                     self.op_st.append(s[i])
    38                     compute_flag=1
    39                 elif s[i]=='(':
    40                     state=NUMBER_STATE
    41                     compute_flag=0
    42                 elif (0<=int(s[i]<=9)):
    43                     state=NUMBER_STATE
    44                     i-=1
    45                 elif s[i]==')':
    46                     right,left=self.number_st.pop(),self.number_st.pop()
    47                     res=left+right if(self.op.pop()=="+") else left-right
    48                     self.number_st.append(res)
    49             if number!=0:
    50                 self.number_st.append(number)
    51                 right,left=self.number_st.pop(),self.number_st.pop()
    52                 res=left+right if(self.op.pop()=="+") else left-right
    53                 self.number_st.append(res)
    54 
    55             if(number==0 and len(self.number_st)==0):
    56                 return 0
    57             
    58             return self.number_st[0]
    View Code

    6. topK

    python中堆和优先队列(均是小顶堆)的使用:

    优先队列(本身带有存储容器)

    from queue import PriorityQueue
    #向队列中添加元素
    Queue.put(item[, block[, timeout]])
    #从队列中获取元素
    Queue.get([block[, timeout]])
    #队列判空
    Queue.empty()
    #队列大小
    Queue.qsize()

    堆(本身不带存储容器,只是定义了一组对容器进行堆相关操作的函数)

    1 from heapq import *
    2 heap = []            # creates an empty heap
    3 heappush(heap, item) # pushes a new item on the heap
    4 item = heappop(heap) # pops the smallest item from the heap
    5 item = heap[0]       # smallest item on the heap without popping it
    6 heapify(x)           # transforms list into a heap, in-place, in linear time
    7 item = heapreplace(heap, item) # pops and returns smallest item, and adds
    8                                # new item; the heap size is unchanged

    topK实现:维持一个k大小的小顶堆

     1 from heapq import *
     2 
     3 def get_topK(nums,k):
     4     hq=nums[:k]
     5     heapify(hq)
     6     
     7     for i in range(k,len(nums)):
     8         if(nums[i]>hq[0]):
     9             heappop(hq)
    10             heappush(hq,nums[i])
    11 
    12     return hq[0]
    13 
    14 nums=[1,5,9,-2,55,77,2]
    15 print(get_topK(nums,2))

    7. median in data stream

    from heapq import *
    
    class Solution:
        def __init__(self):
            self.leftq=[]
            self.rightq=[]
        
        def add(self,x):
            heappush(self.leftq,-x)
            if(len(self.leftq)!=0):
                heappush(self.rightq,-heappop(self.leftq))
            if( len(self.rightq)-len(self.leftq)>0 ):
                heappush(self.leftq,-heappop(self.rightq))
        def get_median(self):
            if((len(self.leftq)+len(self.rightq))&1==1):
                return -self.leftq[0]
            else:
                return (-self.leftq[0]+self.rightq[0])/2.0
    
    s=Solution()
    s.add(1)
    print(s.get_median())
    s.add(2)
    print(s.get_median())
    s.add(3)
    print(s.get_median())
    s.add(4)
    print(s.get_median())
  • 相关阅读:
    CentOS7 常用命令集合
    Microsoft Visual C++ 14.0 is required问题的解决或warning: Debugger speedups using cython not found
    microsoft visual c++与microsoft visual net 版本对应关系
    [Python爬虫] 之三十一:Selenium +phantomjs 利用 pyquery抓取消费主张信息
    Selenium support for PhantomJS has been deprecated, please use headless
    PyDev:warning: Debugger speedups using cython not foun
    文本相似性计算总结(余弦定理,simhash)及代码
    解决 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type的问题
    Java Web学习总结-文件下载
    jsp button提交表单
  • 原文地址:https://www.cnblogs.com/zijidan/p/12495524.html
Copyright © 2011-2022 走看看