![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
不爱刷题的工程师不是好coder
想找到个工作就行
展开
-
剑指offer59队列最大值
思路 这道题为什么在leetcode里试easy。。。怀疑人生。 之前做过一道在O(1)时间内找到最小值的栈(面试题30)和两个栈实现队列(面试题9),因此结合二者可以完成这道题。 第二种思路: 把有可能成为滑动窗口最大值的数值存入一个两端开口的队列。 deque = collections.deque() res, n = [], len(nums) for i, j in zip(range(1 - k, n + 1 - k), range(n)):原创 2020-12-31 12:00:16 · 80 阅读 · 0 评论 -
剑指offer09用两个栈实现队列
思路 栈:先进后出 队列:先进先出 因此基于以上,可以用两个栈实现队列。 对于栈1先正常进栈,在出栈进入栈2,在栈2里进行出栈,此时出栈顺序即队列顺序。 class CQueue: def __init__(self): self.B = [] self.A = [] def appendTail(self, value: int) -> None: self.A.append(value) def deleteHead(s原创 2020-12-31 10:32:48 · 88 阅读 · 0 评论 -
剑指offer4二维数组中的查找
关键点: 找规律,注意到右上角和左下角的数就好了。 当我们注意到左上角右下角的数时,想要在改变查找的下一个数有两个方向,但从右上或左下查找就有一个方向。 即: 以左下为例,当左下的数等于要找的数,直接输出True,当该数大于要找的数只需上移一位,当该数小于要找的数只需右移一位,即每次都在数组的查找范围中剔除一行或一列,缩小范围,直到查到要找的数,或查找范围为空。 class Solution: def findNumberIn2DArray(self, matrix: List[List[int]]原创 2020-12-17 10:43:56 · 55 阅读 · 0 评论 -
20201214剑指offer65
不用加减乘除做加法 本科老师讲到反码补码的时候提过这个,大致记得是按位或,按位与又移位什么的,但是好久不看,当时也是知道个大概并没有深究,现在又回头捡起来。 分两种情况: 1.不是进位的地方:异或运算 2.进位的地方:与运算+左移一位 class Solution: def add(self, a: int, b: int) -> int: x = 0xffffffff a,b = a&x,b&x while b !=0:原创 2020-12-14 15:16:16 · 63 阅读 · 0 评论