![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer按题分类
是小狐狸呀~~
,
展开
-
剑指offer33-二叉树的遍历
方法一:递归*思路:通过递归判断所有子树的正确性(后序遍历是否满足二叉搜索树的定义)递归解析:终止条件: i>=j,说明此子树节点数量<=1递推工作:1. 划分左右子树: 遍历[i,j]区间的元素,寻找第一个大于跟节点的节点,索引记为m。所以左子树区间[i,m-1],右子树区间[m,j],跟索引j2. 判断是否为二叉搜索树:返回值:p == j 判断此树是否正确recur(i,m-1) 判断此树的左子树是否正确recur(m,j-1) 判断此树的右子树是否正确...原创 2020-09-28 17:07:55 · 102 阅读 · 0 评论 -
顺时针打印矩阵
class Solution: def spiralOrder(self, matrix:[[int]]) -> [int]: if not matrix: return [] l, r, t, b, res = 0, len(matrix[0]) - 1, 0, len(matrix) - 1, [] while True: for i in range(l, r + 1): res.append(matrix[t][i原创 2020-09-10 00:01:03 · 60 阅读 · 0 评论 -
leetcode(剑指offer16)-数值的整数次平方
剑指书阅读第三章高质量的代码之代码的规范性缩进,命名(用完整的英文单词组合命名变量和函数,不要用关键词)代码的完整性软件开发中需求在变,写代码时候能够把未来需求可能的变化考虑进去,在需求变化时减少代码改动的风险,程序的可扩展性和可维护性三方面:功能测试基本功能考虑完全边界测试循环的终止条件递归的终止条件负面测试(各种可能的错误输入)把错误信息传递给函数的调用者有三种方法①返回值 不能方便使用计算结果②全局变量 能够使用计算结果,但用户容易忘记检查全局变量③异常可以为不同的出错原创 2020-07-25 21:59:07 · 773 阅读 · 0 评论 -
梦开始的地方——二叉树(?)
leetcode104-二叉树的最大深度解法一:递归时间复杂度O(n) 空间复杂度# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def maxDepth(self, root: Tre原创 2020-07-23 02:19:16 · 160 阅读 · 0 评论 -
leetcode(剑指offer49)-第n个丑数(dp法))
O(n) O(n)class Solution: def nthUglyNumber(self, n: int) -> int: if n <= 0: return -1 dp,a,b,c = [1] * n,0 ,0 ,0 for i in range(1,n): n2,n3,n5 =dp[a] * 2,dp[b] * 3,dp[c] * 5 dp[i] =原创 2020-07-22 16:23:39 · 91 阅读 · 0 评论 -
刷题中的字符串
剑指offer05-替换空格知识点:字符串不可变时间复杂度 O(n)class Solution: def replaceSpace(self, s: str) -> str: res = [] for c in s: if c == ' ': res.append("%20") else: res.append(c) retur原创 2020-07-22 05:39:39 · 119 阅读 · 2 评论 -
二维数组的查找
解法一:时间复杂度O(m+n) 空间复杂度O(1)class Solution: def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: i,j = len(matrix) - 1,0 while i >= 0 and j < len(matrix[0]): if matrix[i][j] > target:i -= 1原创 2020-07-22 05:26:40 · 72 阅读 · 0 评论 -
leetcode(剑指offer47)-礼物的最大价值(dp法,学习二维数组)
和机器人走矩阵题目一样,问题不一样本题求最值,那题求sum。难点:i,j 为0等等的边界值!!!!m,n = len(grid),len(grid[0])class Solution: def maxValue(self, grid: List[List[int]]) -> int: m,n = len(grid),len(grid[0]) for j in range(1,n): grid[0][j] += grid[0][原创 2020-07-19 20:47:22 · 115 阅读 · 0 评论 -
leetcode(剑指offer48)-最长不含重复字符的子字符串(dp法)
解题思路:长度为n的字符串共有(n+1)n/2个子串,用暴力法O(n^3),因此用dp降低时间复杂度解法一:dp+hash表 时间复杂度O(n),空间复杂度O(1)哈希表统计: 遍历字符串 ss 时,使用哈希表(记为 dicdic )统计 各字符最后一次出现的索引位置 。左边界 ii 获取方式: 遍历到 s[j]s[j] 时,可通过访问哈希表 dic[s[j]]dic[s[j]] 获取最近的相同字符的索引 ii空间复杂度 O(1): 字符的 ASCII 码范围为 00 ~ 127127 ,原创 2020-07-19 00:33:31 · 407 阅读 · 0 评论 -
剑指offerJZ41-和为S的连续正数和序列
解法一:for,for解法, 时间复杂度O(N^2)class Solution: def FindContinuousSequence(self, tsum): if tsum <= 1: return [] newli = [] li = [] sum = 0 for i in range(1,tsum): sum = 0 for原创 2020-07-08 17:27:23 · 100 阅读 · 0 评论 -
剑指offerJZ28 - Leetcode 多数投票
0705阅读书中关于时间效率的介绍时间效率体现在① 编程习惯② 同一算法用递归或者循环时间效率不一样。递归如果小问题中有相互重叠的部分,时间效率差。解决办法是用递归思路分析问题,写代码时用数组保存中间结果基于循环实现。绝大部分dp算法分析和代码实现基于这两个步骤,参见礼物的最大价值(没做) 最长不含重复的子字符串(没做)③ 对数据结构与算法的掌握 查找,顺序查找O(n),排序数组查找O(logn),哈希表O(1)**剑指offer28 == Leeetcode 多数投票利用内置函数 sort c原创 2020-07-05 17:41:30 · 109 阅读 · 0 评论 -
剑指offerJZ40-数组中只出现一次的数字
解法一:python count内置函数if array.count(i) == 1:res.append(i)解法二:hashmap,见总结篇博客解法三:逻辑运算,利用异或,见总结篇博客。数同自己异或为0.分成两组,各组包含一个孤儿数(利用二进制第一个为1的位是否位1分为两组)...原创 2020-07-02 17:44:57 · 148 阅读 · 0 评论