![](https://img-blog.csdnimg.cn/20210401200325968.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 84
数据结构与算法学习笔记
超周到的程序员
【履历】目前就职于快手,大三时在腾讯实习,22年秋招收到多家大厂的录用offer:腾讯云、快手、云账户、福耀、比亚迪等,有二十余场面试经验
【技术咨询】本人可提供指导的方向:软件开发领域的多种语言的后端开发(Java、Python、Node.js、Go)、前端开发、3D游戏开发、App开发、网络爬虫、Web自动化、数据可视化
展开
-
【算法】解题总结:剑指Offer 86 在二叉树中找到两个节点的最近公共祖先、剑指Offer 68 二叉搜索树的最近公共祖先
JZ86 在二叉树中找到两个节点的最近公共祖先(中等)题目描述示例输入:[3,5,1,6,2,0,8,#,#,7,4],5,1返回值:3思路可用递归的思想,我们可以再写一个返回值和参数都为树结点类型的函数进行递归,让它最终返回待求o1、o2最近的祖先结点,在递归函数中,对左右子树都再次进行递归,若当前结点为空时我们肯定要终止并返回 null,因为此条递归线路并没有找到值为 o1 或 o2 的结点,而如果当前结点值等于给定的 o1 或 o2 时,我们也应该返回此结点,从而结束此条原创 2022-01-10 12:59:18 · 519 阅读 · 1 评论 -
【算法】解题总结:剑指Offer 84 二叉树中和为某一值的路径(三) 、剑指Offer 82 二叉树中和为某一值的路径(一)
JZ84 二叉树中和为某一值的路径(三)(中等)题目描述给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点2.总节点数目为n3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)假如二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求示例1输入:{1,2,3,4,5,4,3,#原创 2021-12-31 10:09:00 · 357 阅读 · 2 评论 -
【算法】解题总结:剑指Offer 67 剪绳子(递归、记忆化递归、动态规划) 、剑指Offer 29 顺时针打印矩阵
JZ67 剪绳子(中等)题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例输入:8返回值:18思路实现(中等)题目描述示例思路实现...原创 2021-12-28 11:01:52 · 447 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 13 机器人的运动范围、剑指Offer 17 打印从1到最大的n位数
JZ13 机器人的运动范围(较难)题目描述示例1输入:1,2,3返回值:3示例2输入:0,1,3返回值:1示例3输入:10,1,100返回值:29说明:[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[0,21],[0,22],[0,23原创 2021-12-22 11:36:09 · 440 阅读 · 1 评论 -
【算法】解题总结:剑指Offer 73 翻转单词序列、剑指Offer 18 删除链表的节点(2种思路)
JZ73 翻转单词序列(中等)题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例1输入:“nowcoder. a am I”返回值:“I am a nowco原创 2021-12-18 12:28:54 · 144 阅读 · 2 评论 -
【算法】解题总结:剑指Offer 28 对称的二叉树、剑指Offer 37 序列化二叉树
JZ28 对称的二叉树(中等)题目描述给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的下面这棵二叉树不对称。示例思路实现(中等)题目描述示例思路实现...原创 2021-11-02 16:11:03 · 213 阅读 · 0 评论 -
【算法】解题总结:剑指 Offer 33 二叉搜索树的后序遍历序列、剑指 Offer 34 二叉树中和为某一值的路径
JZ33 二叉搜索树的后序遍历序列(中等)题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树)示例输入:[4,8,6,12,16,14,10]返回值:true思路二叉搜索树由于其自身结构的特殊性,导致其在遍历时也有其独特的性质,二叉搜索树的中序遍历可以得到一个按结点值从小到大排序的有序序列;而在其后续遍历时,由于递归之中是先向左 dfs,再向原创 2021-10-31 17:42:59 · 150 阅读 · 0 评论 -
【算法】解题总结:剑指 Offer 26 树的子结构、剑指 Offer 32 从上往下打印二叉树
JZ26 树的子结构(中等)题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例输入:{8,8,#,9,#,2,#,5},{8,9,#,2}返回值:true思路实现(中等)题目描述示例思路实现...原创 2021-10-28 17:45:04 · 74 阅读 · 0 评论 -
【算法】解题总结:剑指 Offer 35 复杂链表的复制、剑指 Offer 76 删除链表中重复的结点
JZ35 复杂链表的复制(较难)题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。示例:输入:{1,2,3,4,5,3,5,#,2,#}输出:{1,2,3,4,5,3原创 2021-10-24 22:20:20 · 129 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树
LeetCode 714 买卖股票的最佳时机含手续费(中等)题目描述给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例1输入:prices = [1, 3, 2, 8, 4, 9], fe原创 2021-10-22 19:58:04 · 430 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 56 合并区间、LeetCode 738 单调递增的数字
LeetCode 56 合并区间(中等)题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:原创 2021-10-16 16:55:01 · 182 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 435 无重叠区间、LeetCode 763 划分字母区间
LeetCode 435:无重叠区间(中等)题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例1输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2]原创 2021-10-15 17:23:57 · 178 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 406 根据身⾼重建队列 、LeetCode 452 用最少数量的箭引爆气球
LeetCode 406:根据身⾼重建队列(中等)题目描述假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。原创 2021-10-14 08:36:04 · 137 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 135 分发糖果 、LeetCode 860 柠檬水找零
LeetCode 135:分发糖果(困难)题目描述老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入:[1,2,2]输出:4解释:你可以分别给这三原创 2021-10-12 07:17:07 · 444 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 1005 K 次取反后最大化的数组和、 LeetCode 134 加油站
LeetCode 1005:K 次取反后最大化的数组和(简单)题目描述给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解原创 2021-10-08 08:43:06 · 146 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 55 跳跃游戏、LeetCode 45 跳跃游戏 II
LeetCode 55:跳跃游戏(中等)题目描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下原创 2021-10-07 16:01:25 · 396 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 53 最大子序和、LeetCode 122 买卖股票的最佳时机 II
LeetCode 53 最大子序和(简单)题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例1输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100原创 2021-09-30 15:58:25 · 133 阅读 · 0 评论 -
【算法】贪心算法:LeetCode 455 分发饼干、LeetCode 376 摆动序列
LeetCode 455 :分发饼干(简单)题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出:原创 2021-09-28 13:23:40 · 265 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 63 数据流中的中位数、剑指Offer 65 矩阵中的路径
JZ63 数据流中的中位数(中等)题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。示例输入:[5,2,3,4,1,6,7,0,8]返回值:"5.00 3.50 3.00 3.50 3.00 3.50 4.00 3.50 4.00 "说明:数据原创 2021-08-26 16:33:56 · 154 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 57 二叉树的下一个结点、剑指Offer 60 把二叉树打印成多行
JZ57 二叉树的下一个结点(中等)题目描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示示例:输入:{8,6,10,5,7,9,11},8返回:9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后原创 2021-08-11 14:54:07 · 146 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 54 字符流中第一个不重复的字符(2 种方法)、剑指Offer 55 链表中环的入口结点
JZ54 字符流中第一个不重复的字符(中等)题目描述示例思路实现(中等)题目描述示例思路实现原创 2021-08-09 11:44:24 · 111 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 47 极限条件下求1+2+3+...+n、剑指Offer 53 表示数值的字符串
JZ47 求1+2+3+…+n(中等)题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例输入:5返回值:15思路此题的条件限制得特别苛刻实现(中等)题目描述示例思路实现...原创 2021-08-02 10:12:17 · 324 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 42 和为S的两个数字(2 种方法 +含数学逻辑反证法详细证明)、剑指Offer 43 左旋转字符串
JZ42 和为S的两个数字(中等)题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回两个数的乘积最小的,如果无法找出这样的数字,返回一个空数组即可。返回值描述:对应每个测试案例,输出两个数,小的先输出。示例输入:[1,2,4,7,11,15],15返回值:[4,11]思路根据题意因为实现public class JZ42和为S的两个数字 { public ArrayList<Integer原创 2021-08-01 09:09:43 · 116 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 41 和为S的连续正数序列、剑指Offer 40 数组中只出现一次的两个数字
JZ41 和为S的连续正数序列(中等)题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序原创 2021-07-31 23:14:37 · 103 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 31 整数中1出现的次数(5种想法 + 3 种方法)、剑指Offer 37 数字在升序数组中出现的次数
JZ31 整数中1出现的次数(从1到n整数中1出现的次数)(中等)题目描述输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次示例输入:13返回值:6解题思路与过程1 找规律:失败的思路对于此题,我一开始是想找出规律再去做的,如下图但是,100以内的规律很好找,但是到了100多,200多,…,1000多,…,发现这规律也不是那么容易找的,于是我便打算换一种想法。2 二进制&运算:原创 2021-07-31 15:11:24 · 123 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 29 二叉搜索树与双向链表(2种方法)、剑指Offer 29 最小的K个数(高效算法)
JZ26 二叉搜索树与双向链表(中等)题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构4.你不用输出或者处理,示例中输出里面的英文,比如"From left to right are:"这样的,程序会根据你的返回原创 2021-07-30 12:03:18 · 106 阅读 · 2 评论 -
【算法】解题总结:剑指Offer 15 反转链表、剑指Offer 21 栈的压入弹出序列
JZ15 反转链表(中等)题目描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}思路这也是一道经典的链表题目,借助栈结构便可以实现,我们遍历链表中的结点,并且按顺序压入栈中(注意,因为链表中的结点都有 next 属性值,我们应自己去创建一个等 val 值的结点,而不能直接用链表中的结点),之后我们创建一个辅助用的头结点,将栈中的结点出栈,并加入到头结点之后,这样,由于栈结构先进后出的特点,我们最终得到新的链表自然就为原链表的逆序链表原创 2021-07-29 22:27:28 · 148 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 13 调整数组顺序使奇数位于偶数前面、剑指Offer 14 链表中倒数最后k个结点
JZ13 调整数组顺序使奇数位于偶数前面(中等)题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。示例1输入:[1,2,3,4]返回值:[1,3,2,4]示例2输入:[2,4,6,5,7]返回值:[5,7,2,4,6]思路我的思路是通过前移部分需要移动的奇数元素,来使得数组中的奇数在数组中的前部分,偶数在后部分,通过遍历数组,如果当前元素为奇数原创 2021-07-29 21:23:56 · 127 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 11 二进制中1的个数(4 种方法)、剑指Offer 12 数值的整数次方
JZ11 二进制中1的个数(中等)题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例输入:10返回值:2解题过程1 纯正数版——方法一此题我首先是按纯正数的情况来进行考虑的,但因为负数涉及补码,因此这种方式很对负数是行不通的,但是我还是想练习一下针对这种问题的编码能力,而且如果只是纯正数(当然,0 的情况特殊可考虑,可不考虑),也可以单独出一道题,也有研究的价值。对一个十进制正数转为二进制的形式,简单来说就是拆成了多个 2^n 的组合(当然,原创 2021-07-29 10:10:47 · 124 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 30 连续子数组的最大和、剑指Offer 4 重建二叉树
JZ30 连续子数组的最大和(简单)题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。示例输入:[1,-2,3,10,-4,7,2,-5]返回值:18说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。思路使用动态规划求解问题,最重要的就是确定从前一个阶段转化到后一个阶段之间的递推关系, 递推关系必原创 2021-07-28 21:25:43 · 107 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 59 按之字形顺序打印二叉树、剑指Offer 62 二叉搜索树的第k个结点(两种方法)
JZ59 按之字形顺序打印二叉树(简单)题目描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]示例1输入:{1,2,3,#,#,4,5}返回值:[[1],[3,2],[4,5]]示例2输入:{8,6,10,5,7,9,11}返回值:[[8],[10,6],[5,7,9,11]]示例3输入:原创 2021-07-27 22:54:35 · 156 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 45 扑克牌顺子(消耗存储数法)、剑指Offer 51 构建乘积数组(2 种方法)
JZ45 扑克牌顺子(简单)题目描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:1)A为1,J为11,Q为12,K为13,A不能视为142)大、小王为 0,0可以看作任意牌3)如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。例如:给出数据[6,0,2,0,4]中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]这样这五张牌在[2,6]区间连续,输出true数据保证每组5个数字,每组最多含有4原创 2021-07-25 22:32:48 · 369 阅读 · 2 评论 -
【算法】解题总结:剑指Offer 8 跳台阶(3 种解法)、剑指Offer 9 跳台阶扩展问题(4 种方法)
JZ8 跳台阶(简单)题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入:2返回值:2示例2输入:7返回值:21思路实现```【算法题—剑指Offer】详细解析:## (简单)### 题目>**描述**>**示例**### 思路### 实现```java...原创 2021-07-24 21:03:59 · 544 阅读 · 4 评论 -
【算法】解题总结:剑指Offer 3 从尾到头打印链表(2 种方法)、剑指Offer 36 两个链表的第一个公共结点
JZ3 从尾到头打印链表(简单)题目描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 1000示例1输入:{1,2,3}返回值:[3,2,1]示例2输入:{67,0,24,58}返回值:[58,24,0,67]思路在做这道题时,我想到了两种方法。(先吐槽一点,题目中说了输入的是链表的头结点,但是我在刷题平台上测试,发现其实输入的是原创 2021-07-23 22:06:34 · 121 阅读 · 4 评论 -
【算法】解题总结:剑指Offer 2 替换空格、剑指Offer 1 二维数组中的查找(4 种方法)
JZ2 替换空格(简单)题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。示例输入:“We Are Happy”返回值:“We%20Are%20Happy”思路用 Java 实现的话,便可借用 String 类的内置方法 replaceAll(String regex, String replacement),当然,此题也可自己实现这个函数的类似功能,例如将字符串原创 2021-07-22 21:50:15 · 162 阅读 · 1 评论 -
【算法】解题总结:剑指Offer 50 数组中重复的数字(2 种方法)、剑指Offer 48 不用加减乘除做加法
JZ50 数组中重复的数字(简单)题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1示例输入:[2,3,1,0,2,5,3]返回值:2说明:2或3都是对的思路用哈希法或者暴力解法都可以通过(因过于简单,不再赘述),但是没有用到条件:“所原创 2021-07-22 09:06:52 · 123 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 38 二叉树的深度、剑指Offer 39 平衡二叉树
()题目描述示例思路实现()题目描述示例思路实现原创 2021-07-20 18:44:55 · 118 阅读 · 1 评论 -
【算法】解题总结:剑指Offer 28 数组中出现次数超过一半的数字(5 种方法)、剑指Offer 34 第一个只出现一次的字符
JZ28 数组中出现次数超过一半的数字(简单)题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000示例1输入:[1,2,3,2,2,2,5,4,2]返回值:2示例2输入:[3,3,3,3,2,2,2]返回值:3示例3输入:[1]原创 2021-07-19 11:32:13 · 177 阅读 · 0 评论 -
【算法】解题总结:剑指Offer 18 二叉树的镜像(2 种方法)、剑指Offer 20 包含min函数的栈
JZ18 二叉树的镜像(简单)题目描述操作给定的二叉树,将其变换为源二叉树的镜像。比如: 源二叉树 8 / \6 10/ \ / \ 5 7 9 11镜像二叉树 8&n原创 2021-07-19 08:18:19 · 129 阅读 · 3 评论 -
【算法】解题总结:剑指Offer 6 旋转数组的最小数字、剑指Offer 16 合并两个排序的链表
JZ6 旋转数组的最小数字(简单)题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例输入:[3,4,5,1,2]返回值:1思路本题中关于此原始数组的其中一个描述是非递减排序的数组,这个名词我们千万不能理解错了,非递减排序的正确意思是,数据递增排列,但并非单调递增(因为可能有多个相等的数据的情况),即数列整体上从小到大并且允许其中原创 2021-07-18 08:51:57 · 92 阅读 · 1 评论