面试常见算法题

1、SingleLinkList python

    1.1 链表反转app

    1.2 链表相邻两个节点交换blog

    1.3 判断链表是否是有环队列

 

2、Stackelement

    2.1判断输入的括号是否合法字符串

         

 def isValid(self, s: str) -> bool:
        stack = []
        str_dic = {')':'(', ']':'[', '}':'{'}
        
        for i in s:
            if i not in str_dic:
                stack.append(i)
            else:
                if not stack:
                    return False
                else:
                    res = stack.pop()
                    if str_dic[i] == res:
                        pass
                    else:
                        return False
        return not stack
整个题目的思考逻辑是, 若是输入的字符串是又括号 ,判断咱们的stack是否为空,若是是空的直接报错,若是不是空的,则要弹出栈顶元素,而后根据咱们的字典,以输入的字符为k,拿到value,判断value与咱们的栈顶元素是否一致,若是不一致,直接报错。
若是是输入的是左扩展,咱们直接压入栈,最后将整个字符串遍历完成后,判端栈中是否还有元素,若是有说有部分没有匹配上,报错。

  

  2.2 只经过栈实现一个队列 input

class MyQueue:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.input = []
        self.output = []
        

    def push(self, x: int) -> None:
        """
        Push element x to the back of queue.
        """
        self.input.append(x)
        

    def pop(self) -> int:
        """
        Removes the element from in front of queue and returns that element.
        """
        if len(self.output):
            return self.output.pop()    
        for j in range(len(self.input)):
            self.output.append(self.input.pop())
        return self.output.pop()    
            
        

    def peek(self) -> int:
        """
        Get the front element.
        """
        if not len(self.output):
           
            for j in range(len(self.input)):
                self.output.append(self.input.pop())
            return self.output[-1]
        else:
             return self.output[-1]
        

    def empty(self) -> bool:
        """
        Returns whether the queue is empty.
        """
        if len(self.output) or len(self.input):
            return False
        return True这个问题一个思路是,经过两个栈,来实现先进先出, 过程是,A栈只用来push就是压入,另一个栈,当peek或者pop时,将A栈的数据,,放入到B栈中,而后在从B栈中进行返回,这样就达到了一个先进先出的结果
相关文章
相关标签/搜索