刷题笔记
文章平均质量分 63
CV干饭王
这个作者很懒,什么都没留下…
展开
-
面试必会:剑指offer手撕代码(一):第1~16题,详细题解python代码,建议熟练默写
根据我的大厂面试经验,剑指offer的题一定都要熟练掌握,面试时极有可能让我们手撕部分题的代码,当然这是最简单的情况,像BAT这类的大厂大部分时候让我们手撕 动态规划 题。总之,剑指offer的题目算法思路我们一定要会!!!1、二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例1题解python代码:# -*- codi.原创 2021-03-15 20:02:18 · 607 阅读 · 1 评论 -
力扣刷题笔记:331.验证二叉树的前序序列化(二叉树的出度入度知识,必能看懂)
题目:331、验证二叉树的前序序列化序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 ‘#’ 。你可以认为输入原创 2021-03-12 15:52:41 · 827 阅读 · 1 评论 -
力扣刷题笔记:105.从前序与中序遍历序列构造二叉树 && 106.从中序与后序遍历序列构造二叉树(递归,详细注释,对比展示,必能看懂)
105、从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:105、题解python代码:思路:前序遍历的第一个元素肯定是根节点,然后通过找到中序根节点在中序遍历中的位置,就可以判断左右叶子的分布(中序遍历中,根节点左边都是左叶子,后边都是右叶子)。# Definition for原创 2021-03-12 10:52:34 · 187 阅读 · 1 评论 -
力扣刷题笔记:110.平衡二叉树(深度优先搜索dfs,必能看懂)
题目:110、平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-10^4原创 2021-03-11 21:39:46 · 245 阅读 · 4 评论 -
力扣刷题笔记:96.不同的二叉搜索树(动态规划,详细图解,必能看懂)
题目:96、不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:题解思路:1、思路如果整数 1 ~ n 中的 k 作为根节点值,则 1 ~ k-1 会去构建左子树,k+1 ~ n 会去构建右子树。左子树出来的形态有 a 种,右子树出来的形态有 b 种,则整个树的形态有 a∗b 种。以 k 为根节点的 BST 种类数 = 左子树 BST 种类数 * 右子树 BS原创 2021-03-11 16:27:48 · 224 阅读 · 5 评论 -
力扣刷题笔记:227.基本计算器 II(栈来处理运算符的优先级,主要是逻辑思路要清晰,代码很简单,小表弟都看懂了)
题目:227、基本计算器 II给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = “3+2*2”输出:7示例 2:输入:s = " 3/2 "输出:1示例 3:输入:s = " 3+5 / 2 "输出:5提示:1 <= s.length <= 3 * 10^5s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开s 表示一个 有效表达式表达式中的所有整数原创 2021-03-11 10:02:25 · 497 阅读 · 3 评论 -
力扣刷题笔记:224.基本计算器(利用栈来处理括号的优先级,主要是逻辑思路要清晰,代码逐行注释,小表弟都看懂了)
题目:224、基本计算器实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。示例 1:输入:s = “1 + 1”输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = “(1+(4+5+2)-3)+(6+8)”输出:23提示:1 <= s.length <= 3 * 10^5s 由数字、’+’、’-’、’(’、’)’、和 ’ ’ 组成s 表示一个有效的表达式题解思路:重点:本题目只有 “+”, “-” 运原创 2021-03-10 10:53:59 · 408 阅读 · 7 评论 -
力扣刷题笔记:63.不同路径 II(62.不同路径的加强版,添加了障碍物,还是动态规划,直接套模板,把握好边界即可)
题目:63、不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到原创 2021-03-09 22:18:58 · 201 阅读 · 1 评论 -
力扣刷题笔记:62.不同路径(动态规划经典题,直接套模板)
题目:62、不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下原创 2021-03-09 21:20:27 · 206 阅读 · 3 评论 -
力扣刷题笔记:22.括号生成(回溯模板题,直接套模板)
题目:22、括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8题解思路:直接套回溯法模板,再定义个判断括号有效的函数即可。回溯python模板:https://blog.csdn.net/weixin_44414原创 2021-03-08 21:45:30 · 267 阅读 · 3 评论 -
力扣刷题笔记:17.电话号码的字母组合(回溯模板题,直接套模板,另外列出动态规划的写法供大家参考)
题目:17、电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]提示:0 &l原创 2021-03-08 21:10:44 · 335 阅读 · 3 评论 -
力扣刷题笔记:132. 分割回文串 II(动态规划,逐行代码注释,主要是好理解一些,其他题解根本看不懂。。。)
题目:132、分割回文串 II给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。示例 1:输入:s = “aab”输出:1解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。示例 2:输入:s = “a”输出:0示例 3:输入:s = “ab”输出:1提示:1 <= s.length <= 2000s 仅由小写英文字母组成注:和131题很像,但用回溯发会超时。。。题解思原创 2021-03-08 16:11:54 · 188 阅读 · 3 评论 -
力扣刷题笔记:131.分割回文串(回溯经典题,直接套模板)
题目:131、分割回文串给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]题解思路:看到题目要求「所有可能的结果」,而不是「结果的个数」,一般情况下,我们就知道需要暴力搜索所有的可行解了,可以用「回溯法」。直接套回溯法python模板代码。回溯法python模板套路:https://blog.csdn.net/weixin_44414948/arti原创 2021-03-07 17:33:29 · 413 阅读 · 5 评论 -
力扣刷题笔记:66.加一(队列存结果,判断进位符,详细注释,速度超94%)
题目:66、加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]提示原创 2021-03-05 20:57:16 · 216 阅读 · 1 评论 -
力扣刷题笔记:38.外观数列(递归迭代经典题,作为练手十分合适)
题目:38、外观数列给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,原创 2021-03-05 16:08:21 · 180 阅读 · 1 评论 -
力扣刷题笔记:496. 下一个更大元素 I(单调递减栈,很容易理解)
题目:下一个更大元素 I给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于 num1 中的数字 4原创 2021-03-05 13:23:11 · 244 阅读 · 2 评论 -
力扣刷题笔记:232.用栈实现队列(只使用栈的基本操作,很容易理解)
题目:232、用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop原创 2021-03-05 09:10:22 · 190 阅读 · 2 评论 -
力扣刷题笔记:338.比特位计数(四种解法,暴力法->记忆搜索法->动态规划法,第四种位运算骚操作强烈推荐,层层递进,很容易理解)
题目:338、比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?——————————————————————————————————要求算法的空间复杂度为O(n)。原创 2021-03-03 17:17:02 · 290 阅读 · 4 评论 -
力扣刷题笔记:面试题 08.06. 汉诺塔问题(经典分治算法例题,彩图+详解,想不会都难)
题目:面试题 08.06. 汉诺塔问题在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1:输入:A = [2, 1, 0], B = [], C原创 2021-03-01 21:34:30 · 341 阅读 · 1 评论 -
力扣刷题笔记:20.有效的括号(利用栈进行配对,详细题解通俗易懂)
题目:20、有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true原创 2021-02-25 16:17:23 · 957 阅读 · 6 评论 -
面试必会:十大经典排序算法(python实现,附复杂度分析及稳定性)
十大排序算法复杂度及稳定性属性表图片名词解释:n: 数据规模k: “桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外内存1、冒泡排序冒泡排序算法的原理如下:a. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。——b. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。——c. 针对所有的元素重复以上的步骤,除了最后一个。——d. 持续每次对越来越少的元素重复上面的步骤,直到没有原创 2021-02-25 14:48:06 · 1882 阅读 · 23 评论 -
力扣刷题笔记:1052.爱生气的书店老板(普通滑窗题,巧妙利用grumpy[i]的0、1值作为flag计算满意顾客人数)
题目:1052、爱生气的书店老板今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回原创 2021-02-23 17:58:44 · 196 阅读 · 1 评论 -
Python 列表、队列、集合、字典各方法的时间复杂度(list、deque、set、dict)
本文中,’n’ 代表容器中元素的数量,’k’ 代表元素值,或者参数的数量,‘i’ 表示索引值。列表(list)操作时间复杂度复制O(n)appendO(1)insertO(n)extendO(k)索引O(1)赋值(修改值)O(1)pop()O(1)pop(i)O(n)remove(k)O(n)遍历O(n)切片O(k)排序O(n log n)inO(n)max()、min()O.原创 2021-02-22 13:16:45 · 1560 阅读 · 14 评论 -
力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)
题目:1438、绝对差不超过限制的最长连续子数组给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。示例 1:输入:nums = [8,2,4,7], limit = 4输出:2解释:所有子数组如下:[8] 最大绝对差 |8-8| = 0 <= 4.[8,2] 最大绝对差 |8-2| = 6 > 4.[8,2,4] 最大绝对原创 2021-02-21 12:41:19 · 515 阅读 · 4 评论 -
力扣刷题笔记:697.数组的度(哈希表经典题,详细题解思路及代码注释)
题目:697、数组的度给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。示例 1:输入:[1, 2, 2, 3, 1]输出:2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2,原创 2021-02-20 13:07:32 · 278 阅读 · 6 评论 -
力扣刷题笔记:二分查找法python模板(广泛使用,直接套用,倍增法也属于二分法的一种)
二分查找法思路:顾名思义,二分查找就是不停地以二分的形式缩小查找范围,最终找到所需要的元素。时间复杂度:O(logn)二分查找模板写法:class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left <= right: mid = left + (right-l原创 2021-02-19 14:41:07 · 356 阅读 · 5 评论 -
力扣刷题笔记:1004.最大连续1的个数 III(滑窗法,标准滑窗模板题,重点在题意转换,详细题解代码)
题目:1004、最大连续1的个数 III给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:示例 2:提示:1 <= A.length <= 200000 <= K <= A.lengthA[i] 为 0 或 1题解思路:重点:题意转换。把「最多可以把 K 个 0 变成 1,求仅包含 1 的最长子数组的长度」转换为 「找出一个最长的子数组,该子数组内最多允许有 K原创 2021-02-19 14:17:42 · 558 阅读 · 4 评论 -
力扣刷题笔记:滑动窗口法python模板写法(详细注释,广泛使用,秒杀滑窗题)
滑动窗口模板:《挑战程序设计竞赛》这本书中把滑动窗口叫做「虫取法」,非常生动形象。因为滑动窗口的两个指针移动的过程和虫子爬动的过程非常像:前脚不动,把后脚移动过来;后脚不动,把前脚向前移动。分享一个滑动窗口的模板,能解决大多数的滑动窗口问题:滑窗模板python代码:def findSubArray(nums): N = len(nums) # 数组/字符串长度 left, right = 0, 0 # 双指针,表示当前遍历的区间[left, right],闭区间 sums原创 2021-02-19 13:48:53 · 4078 阅读 · 3 评论 -
力扣刷题笔记:995.K 连续位的最小翻转次数(滑窗法,使用队列记录翻转情况减少时间复杂度,详细题解)
题目:995、K 连续位的最小翻转次数在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。示例 1:输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0], K = 2输出:-1解释:无论我们怎样翻转大小为 2原创 2021-02-19 12:17:14 · 211 阅读 · 1 评论 -
力扣刷题笔记:441.排列硬币(二分查找模板题,等差数列求前n项和,代码很好理解)
题目:441、排列硬币你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。给定一个数字 n,找出可形成完整阶梯行的总行数。n 是一个非负整数,并且在32位有符号整型的范围内。示例 1:n = 5硬币可排列成以下几行:¤¤ ¤¤ ¤因为第三行不完整,所以返回2.示例 2:n = 8硬币可排列成以下几行:¤¤ ¤¤ ¤ ¤¤ ¤因为第四行不完整,所以返回3.题解思路:将n视为等差数列的前k项和,利用二分法逼近查找,找到n所处的原创 2021-02-17 11:39:10 · 339 阅读 · 3 评论 -
力扣刷题笔记:167.两数之和 II - 输入有序数组(二分法+双指针法,双指针法更快,代码很好理解)
题目:167、两数之和 II - 输入有序数组给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:输入:number原创 2021-02-16 17:09:01 · 330 阅读 · 5 评论 -
力扣刷题笔记:50.Pow(x, n)(二分法、普通和位运算两种写法,方法一样,很好理解)
题目:50、Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25题解思路:二分法,通过折半计算,每次把 n 减半,降低时间复杂度。两种写法:一、普通写法。原创 2021-02-15 23:01:43 · 315 阅读 · 1 评论 -
力扣刷题笔记:765.情侣牵手(暴力解法,速度超93.97%的提交,空间超62%的提交,大年初三的困难题,就这。。。)
题目:765、情侣牵手N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2N-2, 2N-1)。这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。示例 1:输入: row = [0, 2, 1, 3]输出: 1解释: 我原创 2021-02-14 21:32:19 · 448 阅读 · 2 评论 -
力扣刷题笔记:448.找到所有数组中消失的数字(1暴力解法、2集合差法、3索引标记法[无额外空间开销],详细题解及代码注释)
题目:448、找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]题解思路:方法1:暴力解法直接将题目给的nums列表变成set集合去重,然后遍历集合,判断原创 2021-02-13 21:15:48 · 291 阅读 · 0 评论 -
力扣刷题笔记:29.两数相除(倍增法、很容易理解的代码、不使用任何的乘除运算)
题目:29、两数相除给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…) =原创 2021-02-12 22:22:13 · 637 阅读 · 2 评论 -
力扣刷题笔记:剑指 Offer 27. 二叉树的镜像(利用临时列表遍历树的所有节点 node ,并交换每个 node 的左 / 右子节点。)
题目:剑指 Offer 27、二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:镜像输出:示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000题解思路:利用栈(或队列)遍历树的所有节点 node ,并交换每个 node 的左 / 右子节点。算法流程:特例处理: 当 root 为空时,直接返回 null;初始化: 栈(或队列),本文用栈,并加入根节点原创 2021-02-10 16:35:09 · 340 阅读 · 2 评论 -
力扣刷题笔记:剑指 Offer 32 - III. 从上到下打印二叉树 III(单纯的列表、队列queue,对二叉树进行逐层遍历,再将每层按奇偶分顺逆序)
题目:剑指 Offer 32 - III、从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:[[3],[20,9],[15,7]]提示:节点总数 <= 1000题解思路:单纯利用列表对二叉树进行逐层遍历,再将每层按奇偶分顺逆序。题解python代码:#原创 2021-02-10 16:27:13 · 231 阅读 · 0 评论 -
力扣刷题笔记:567.符串的排列(滑窗,奶奶都能看懂)
题目:567、符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间题解思路:1、原创 2021-02-10 13:13:08 · 825 阅读 · 3 评论 -
力扣刷题笔记:面试题 16.15. 珠玑妙算(列表操作,简单易懂,速度不比哈希表慢)
题目:面试题 16.15. 珠玑妙算珠玑妙算游戏(the game of master mind)的玩法如下。计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,计算机可能有RGGB 4种(槽1为红色,槽2、3为绿色,槽4为蓝色)。作为用户,你试图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。给定一种颜色组合solution和一个猜测g原创 2021-02-09 16:01:29 · 595 阅读 · 4 评论 -
力扣刷题笔记:992. K 个不同整数的子数组(滑窗法,很容易理解的代码、完整题解代码及注释)(暴力解法,结果python超时了。。。)
题目:992、K 个不同整数的子数组给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。示例 1:输入:A = [1,2,1,2,3], K = 2输出:7解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2].示原创 2021-02-09 15:30:11 · 392 阅读 · 1 评论