剑指Offer
一杯小熊
这个作者很懒,什么都没留下…
展开
-
剑指Offer 43 1~n整数中1出现的次数
class Solution: def countDigitOne(self, n: int) -> int: digit, res = 1, 0 high, cur, low = n // 10, n % 10, 0 while high or cur: if cur == 0: res += high*digit elif cur == 1: res += high*digit + low...原创 2021-03-22 10:33:24 · 37 阅读 · 0 评论 -
剑指Offer 41 数据流的中位数
代码阶段: from heapq import * 字节调用heapq中的函数就可以 from heapq import * class MedianFinder: def __init__(self): """ initialize your data structure here. """ self.A = [] #小顶堆,保存较大的一半 self.B = [] #大顶堆,保存较小的一半 ...原创 2021-03-21 16:58:14 · 43 阅读 · 0 评论 -
剑指Offer 26 树的子结构
思路:dfs函数用来判断B中所有节点是否与A中当前节点开始的数相同,然后主函数判断B是不是A的子结构 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSubStructure..原创 2021-03-19 20:53:31 · 53 阅读 · 0 评论 -
剑指Offer 16 数值的整数次方
class Solution: def myPow(self, x: float, n: int) -> float: if x == 0: return 0 if n < 0: x, n = 1/x, -n res = 1 while n: if n & 1 == 1: res *= x # n % 2 == 1 x *= x n &...原创 2021-03-15 14:47:11 · 65 阅读 · 0 评论 -
剑指Offer 68 二叉树的最近公共祖先
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNod...原创 2021-03-14 16:29:51 · 102 阅读 · 0 评论 -
剑指Offer 59- 二 队列的最大值
思路:使用一个单调递减双向队列 class MaxQueue: def __init__(self): from collections import deque self.A, self.B = deque(), deque() def max_value(self) -> int: return self.B[0] if self.A else -1 def push_back(self, value: int)..原创 2021-03-14 15:20:37 · 56 阅读 · 0 评论 -
剑指Offer 59-1. 滑动窗口的最大值
class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: if not nums or k == 0: return [] deque = collections.deque() # 未形成窗口 for i in range(k): while deque and deque[-1] <...原创 2021-03-14 14:55:26 · 42 阅读 · 0 评论 -
面试题 01.09 字符串轮转
class Solution: def isFlipedString(self, s1: str, s2: str) -> bool: if not s1 and not s2: return True if len(s1) != len(s2): return False for i in range(len(s1)): if s1 == s2[i:] + s2[:i]: return True r...原创 2021-03-13 22:21:53 · 54 阅读 · 0 评论 -
2021-03-13
class Solution: def oneEditAway(self, first: str, second: str) -> bool: if abs(len(first) - len(second)) > 1: return False if len(first) > len(second): first, second = second, first for i in range(len(f...原创 2021-03-13 21:38:25 · 51 阅读 · 0 评论 -
剑指Offer 66. 构建乘积数组
def constructArr(self, a: List[int]) -> List[int]: n = len(a) res, tmp = [1]*n, 1 for i in range(1, n): res[i] = res[i-1]*a[i-1] for i in range(n-2, -1, -1): tmp *= a[i+1] res[i]...原创 2021-03-12 17:53:26 · 62 阅读 · 0 评论 -
剑指Offer 58-1 翻转单词顺序
class Solution: def reverseWords(self, s: str) -> str: s = s.strip() i, j = len(s)-1, len(s)-1 res = [] while i >= 0: while i >= 0 and s[i] != ' ': i -= 1 res...原创 2021-03-11 21:58:34 · 66 阅读 · 0 评论 -
剑指Offer 57- 和为s的连续整数序列
class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: #双指针 i, j, s, res = 1, 2, 3, [] while i < j: if s == target: res.append(list(range(i, j+1))) ...原创 2021-03-11 21:06:47 · 58 阅读 · 0 评论 -
剑指Offer 56- 数组中数字出现的次数
class Solution: def singleNumbers(self, nums: List[int]) -> List[int]: x, y, z, m = 0, 0, 0, 1 for n in nums: z ^= n while z & m == 0: m <<= 1 for n in nums: if n & m: x^= n ...原创 2021-03-10 21:46:23 · 55 阅读 · 0 评论 -
剑指Offer 10 斐波那契数列
def fib(self, n: int) -> int: a, b = 0, 1 for _ in range(n): a, b = b, a + b return a % (int(1e9+7))原创 2021-03-09 23:22:20 · 80 阅读 · 0 评论 -
剑指Offer 53 在排序树组中统计数字出现次数
class Solution: def search(self, nums: List[int], target: int) -> int: def helper(nums, target): i, j = 0, len(nums)-1 while i <= j: mid = (i + j) // 2 if target >= nums[mid]...原创 2021-03-09 11:23:51 · 63 阅读 · 0 评论 -
剑指Offer 52: 两个链表的第一个公共节点
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: node1, n...原创 2021-03-09 10:28:07 · 75 阅读 · 0 评论 -
剑指Offer 49 丑数
class Solution: def nthUglyNumber(self, n: int) -> int: res = [1] i2, i3, i5 = 0, 0, 0 for i in range(n-1): tmp = min(res[i2]*2, res[i3]*3, res[i5]*5) res.append(tmp) if tmp % 2 == 0: ...原创 2021-03-08 10:36:25 · 50 阅读 · 0 评论 -
剑指Offer 48 最长不含重复字符的子字符串
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 n = len(s) #动态规划 dic = {} res, tmp = 0, 0 for j in range(n): i = dic.get(s[j], -1) dic...原创 2021-03-07 22:12:44 · 69 阅读 · 0 评论 -
一道典型的二维动态规划题目:剑指Offer 47
class Solution: def maxValue(self, grid: List[List[int]]) -> int: #动态规划 m, n = len(grid), len(grid[0]) dp = [[0]*n for _ in range(m)] dp[0][0] = grid[0][0] for i in range(1, m): dp[i][0] = dp[i-...原创 2021-03-07 14:10:25 · 90 阅读 · 0 评论 -
剑指Offer 45. 把数组排成最小的数
class Solution: def minNumber(self, nums: List[int]) -> str: s = [str(n) for n in nums] n = len(s) for i in range(n-1): for j in range(n-1-i): if s[j] + s[j+1] > s[j+1] + s[j]: ...原创 2021-03-06 20:17:27 · 55 阅读 · 0 评论 -
剑指Offer 40. 最小的k个数
class Solution: def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: #return heapq.nsmallest(k, arr) if k == 0: return [] hp = [-i for i in arr[:k]] heapq.heapify(hp) for i in arr[k...原创 2021-03-06 11:05:00 · 51 阅读 · 0 评论 -
剑指Offer 35. 复杂链表的复制
""" # Definition for a Node. class Node: def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None): self.val = int(x) self.next = next self.random = random """ class Solution: def copyRandomList(self, head: '...原创 2021-03-05 10:58:33 · 118 阅读 · 1 评论 -
剑指Offer 34 二叉树中和为某一值的路径
思路:dfs + 回溯 注意:如果语句写在递归下面就是回溯,当二叉树遍历完左子树回去的时候就会删除节点 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def pathSum(se..原创 2021-03-04 20:28:16 · 131 阅读 · 1 评论 -
剑指Offer.33 二叉搜索树的后序遍历序列
class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: def helper(left, right): if left >= right: return True p = left while postorder[p] < postorder[right]: p += 1 ...原创 2021-03-03 10:38:07 · 77 阅读 · 0 评论 -
剑指Offer 29:顺时针打印矩阵
class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix: return [] l, r, u, d, res = 0, len(matrix[0])-1, 0, len(matrix)-1, [] while True: for i in range(l, r+1): ...原创 2021-02-28 22:30:09 · 87 阅读 · 0 评论