剑指Offer
文章平均质量分 54
taotaoxianzi
这个作者很懒,什么都没留下…
展开
-
Day15:剑指 Offer 34. 二叉树中和为某一值的路径(中等)
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。路径记录:判断当前节点的值与之前路径之和是否等于targetSum且当前节点为叶子结点。输入:root = [1,2,3], targetSum = 5。输出:[[5,4,11,2],[5,8,4,5]]叶子节点 是指没有子节点的节点。原创 2023-03-15 14:58:24 · 42 阅读 · 0 评论 -
Day15:剑指 Offer 54. 二叉搜索树的第k大节点(简单)
让我们看一下中序遍历的过程:左子树,根节点,右子树。这样得到的是升序排列。那么我们反过来,先右子树,根节点,再左子树。这样第k个访问到的是不是就是题目要求的?可以看到方法一的空间复杂度为O(N),有没有一种方法能够在不借助辅助空间的前提下,找到第k大的元素值呢?给定一棵二叉搜索树,请找出其中第 k 大的节点的值。题目给到的是二叉搜索树。1 ≤ k ≤ 二叉搜索树元素个数。左子树原创 2023-03-15 14:36:19 · 35 阅读 · 0 评论 -
Day15:剑指 Offer 36. 二叉搜索树与双向链表(中等)
1.循环链表的构建:调用完dfs后,已经得到了一个有序的双向链表。此时的pre指向的是链表的最尾部。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。在链表的连接中,要考虑node->left=pre和pre->right=node。当pre不为空时,修改双向节点引用:cur->left=pre,pre->right=cur。原创 2023-03-15 14:15:35 · 116 阅读 · 0 评论 -
刷题笔记 leetcode 724.寻找中心坐标(简单)
需要考虑一种特别情况,也就是题目中说到的中心坐标在0号位置,这时num=0(因为左侧没有元素) 也就是numi=total。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。,当前元素值为numi,假设该位置为中心坐标元素,则右侧元素之和也为num,有等式:左+当前+右=total。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。求出来,当我们遍历到数组的某个位置i时,其左边的元素和为。时间复杂度:一次遍历即可找到中心坐标,O(N)原创 2023-03-14 15:14:42 · 85 阅读 · 0 评论 -
刷题笔记 leetcode 66.加一(简单)
看完题目的瞬间便想到,能不能将数组转为string型,再将其转为int类型 加一之后再转回数组。但是实践之后发现数组有可能10000位 这样的话无论是int还是double或者是long long都无法装下这么大的数字,因此还是回到数组的角度来解决这个问题。全为9 如9999,此时需要开辟一个新的,长度比当前数组大一的数组 再将首位置1,其余位置0。给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。著作权归领扣网络所有。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。原创 2023-03-14 15:08:12 · 30 阅读 · 0 评论 -
Day4:剑指 Offer 03. 数组中重复的数字(简单)
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。要想在不开辟额外的内存空间情况下,实现题目要求,我们可以先对数组进行一个排序(题目没说不能改变原数组),之后遍历排序数组,遇到重复元素则返回即可。此时,数组下标为0的元素为1,而数组下标为1的元素为3。由于题目说,存在多个重复元素,只需找到任意一个,我们的这种方法找到的是。数组下标为0的元素为2 而数组下标为2的元素为1。原创 2023-03-14 15:00:31 · 45 阅读 · 0 评论 -
Day14:面试题13. 机器人的运动范围(中等)
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1]。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。通过递归,先朝一个方向搜到底,再回溯至上一个节点,沿另一个方向搜索,以此类推。递归参数:当前元素在矩阵中的行列索引 i, j,行列数 m,n 访问数组visited。时间复杂度:O(MN)原创 2023-03-14 11:17:35 · 34 阅读 · 0 评论 -
Day14:剑指 Offer 12. 矩阵中的路径(中等)
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。因此在搜索过程中,遇到这条路已经不可能与字符串匹配成功的情况时,应该立即返回,也叫。时间复杂度:最差情况下,需要递归遍历所有矩阵元素所有方向的方案,所有元素O(MN);例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。通过递归,先朝一个方向搜到底,再回溯至上一个节点,沿另一个方向搜索,以此类推。),为什么是3,四个方向,不用遍历来时的方向。(当前矩阵元素与字符串元素不同)原创 2023-03-14 10:46:42 · 58 阅读 · 0 评论 -
Day3:剑指 Offer 58 - II. 左旋转字符串(简单)
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。而字符串反转的代码大家应该都很熟悉,我就一次性贴出所有代码了。将整个s反转: s="cdefgab" 得到输出。将s进行三次反转,效果与左旋字符串一样。将0到k-1进行反转: s="bacdefg"将k到串尾反转: s="bagfedc"时间复杂度:O(2N)=O(N)空间复杂度: O(1)时间复杂度:O(N)空间复杂度:O(N)原创 2023-03-13 15:57:55 · 50 阅读 · 0 评论 -
Day3:剑指 Offer 05. 替换空格(简单)
首先容易想到的是,我们新建一个空字符串,再遍历s,遇到非空格,就将原值加到空字符串尾部;遇到空格,则将%20加到尾部。从后向前,对数组进行填充,将空格替换为%20。因为从前往后移动元素的时间复杂度为。可不可以原地对旧数组就行修改,使得达到题目要求呢,当然是可以的。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。时间复杂度:一次数组遍历达到要求,O(N),s需要扩充的长度为count*2。空间复杂度:借助辅助数组 O(N)统计s中空格出现的次数count。时间复杂度:O(N)空间复杂度:O(1)原创 2023-03-13 15:43:32 · 47 阅读 · 0 评论 -
Day2:剑指Offer35:复杂链表的复制(中等)
我们只需要新建一个链表点,每个新节点的val=旧节点val,新节点->next=旧节点->next就可以了。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。比如:现在我们要对节点值为13的新节点(红色)的random后缀进行连接。节点复制:在每个节点的后面复制一个值完全一模一样的节点copyNode。这样一来,复制节点13的random就连接到了值为7的复制节点上(虚线)断链:将新节点与旧节点进行断链:这里要格外细心。原创 2023-03-13 15:26:56 · 31 阅读 · 0 评论 -
Day2:剑指 Offer 24. 反转链表(简单)
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。0原创 2023-03-13 15:09:09 · 39 阅读 · 0 评论 -
Day2:剑指 Offer 06. 从尾到头打印链表(简单)
因为单链表是单向的,所以链表的反向遍历是链表中经常遇到的问题。要想从尾到头的返回每个节点的值,我们可以借助栈的。的性质,在顺序遍历链表的同时,将链表值进行入栈操作,遍历完成后,将栈中元素进行出栈,即可实现题目要求。在不借助外部空间的情况下,我们可以将整个链表进行翻转,最后对链表进行一次遍历即可完成要求。时间复杂度:第一次遍历链表进行翻转,第二次遍历翻转后的链表,O(N)空间复杂度:没有开辟要求的数组以外的空间,O(1)时间复杂度:一次遍历链表,一次出栈操作。空间复杂度:另外开辟了一个辅助栈,O(N)原创 2023-03-13 14:50:11 · 46 阅读 · 0 评论 -
Day1:剑指 Offer 30. 包含min函数的栈(简单)
如果题目没有提到对时间复杂度的O(1) 限制,那么直接维护一个最小值即可 每次入栈或者出栈则对最小值进行更新。但是在考虑到O(1)级别的时间复杂度以后,首先应该想到的解题思路是。,因此,每一次入栈操作都应该先取出辅助栈内的栈顶元素进行比较,始终保持栈顶元素为栈内最小值。初始化辅助栈时,可以将栈顶元素设置为INT_MAX,或者直接为第一个入队的元素。定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的。空间复杂度: 辅助栈中有n个元素。原创 2023-03-08 18:17:16 · 53 阅读 · 0 评论 -
Day 1:剑指Offer 09 用两个栈实现队列(简单)
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )来源:力扣(LeetCode)著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。提示:最多会对进行10000次调用。原创 2023-03-08 17:04:29 · 43 阅读 · 0 评论