
剑指offer
十三幺Shisanyao
我是真爱粉,真爱粉爱学大数据
展开
-
剑指Offer算法笔记(Java) 删除链表的节点
删除一个链表节点,肯定是断掉它的前一个节点指向它的指针,然后指向它的后一个节点,即越过了需要删除的这个节点。既然是整个链表元素都不相同,我们要删除给定的一个元素,那我们首先肯定要找到这个元素,然后考虑删除它。给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为2->1->9。给定你链表中值为1的第三个节点,那么在调用了你的函数之后,该链表应变为2->5->9。给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。...原创 2022-07-19 21:00:49 · 862 阅读 · 0 评论 -
剑指Offer算法笔记(Java)数值的整数次方
数据范围∣base∣≤100,∣exponent∣≤100,保证最终结果一定满足∣val∣≤104。时间复杂度O(log_2n),其中n为所求的次方数,快速幂相当于对求幂使用二分法。遍历次方数的次数,指数0,不断累乘底数。时间复杂度O(n),其中n为所求的次方数,一共需要乘nnn次。进阶空间复杂度O(1),时间复杂度O(n)空间复杂度O(1),常数级变量,无额外辅助空间。空间复杂度O(1),常数级变量,无额外辅助空间。2的-2次方等于1/4=0.25。...原创 2022-07-16 21:39:57 · 198 阅读 · 0 评论 -
剑指Offer算法笔记(Java) 打印从1到最大的n位数
既然是从1开始顺序输出到n位数的最大值,一般来说nnn位数最大就是n个9,这样不方便于计算,可以直接遍历到n+1位的最小值结束,即10^n。输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999。step2从1遍历到10^n-1,将所有数字顺序加入数组。step1从1开始连乘10或者直接用次方计算10^n。...原创 2022-07-15 12:22:47 · 277 阅读 · 0 评论 -
剑指Offer算法笔记(Java)二进制中1的个数
我们都只知道数字1与数字相位与运算,其实只是最后一位为1就是1,最后一位为0就是0,这样我们只需要将数字1移位运算,就可以遍历二进制的每一位,再去做位与运算,结果为1的就是二进制中为1的。因为每次运算会使得n的最低位的1被翻转成0,因此运算次数就等于n的二进制位中1的个数,由此统计1的个数。时间复杂度O(log2n),n为数字的大小,循环次数等于nnn的二进制位中1的个数,最坏情况下n的二进制位全部为1,也即开一个2的log运算。n&(n−1),会将n的二进制中最低位由1变成0。...原创 2022-07-14 21:07:59 · 827 阅读 · 0 评论 -
剑指Offer算法笔记(Java)剪绳子
11.剪绳子描述给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m原创 2022-07-13 12:21:19 · 335 阅读 · 0 评论 -
剑指Offer算法笔记(Java)矩阵中的路径
请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。...原创 2022-07-11 20:33:22 · 241 阅读 · 0 评论 -
剑指Offer算法笔记(Java)二叉树的下一个结点
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示...原创 2022-07-07 21:00:13 · 95 阅读 · 0 评论 -
剑指Offer算法笔记(Java)重建二叉树
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。原创 2022-07-06 17:14:31 · 421 阅读 · 0 评论 -
剑指Offer算法笔记(Java)从尾到头打印链表
4.从尾到头打印链表描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000示例1输入:{1,2,3}返回值:[3,2,1]示例2输入:{67,0,24,58}返回值:[58,24,0,67]题解一、非递归listNode 是链表,只能从头遍历到尾,但是输出却要求从尾到头,这是典型的"先进后出",我们可以想到栈!ArrayList 中有个方法是原创 2022-04-27 13:54:07 · 109 阅读 · 0 评论 -
剑指Offer算法笔记(Java)替换空格
3.替换空格描述请实现一个函数,将一个字符串s中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。数据范围:0 ≤ len(s) ≤ 1000 。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。示例1输入:“We Are Happy”返回值:“We%20Are%20Happy”示例2输入:" "返回值:“%20”题解解法一:暴力法public static String replaceSp原创 2022-04-27 08:29:49 · 158 阅读 · 0 评论 -
剑指Offer算法笔记(Java)二维数组中的查找
2.二维数组中的查找描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。数据范围:矩阵的长宽满足 0 <= n,m < =5000≤n,m≤5原创 2022-04-25 16:22:54 · 137 阅读 · 0 评论 -
剑指Offer算法笔记(Java)数组中重复的数字
标题1. 数组中重复的数字描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1数据范围:0\le n \le 10000 \0≤n≤10000进阶:时间复杂度O(n)\O(n) ,空间复杂度O(n)\O(n)标题示例1输入:[2,3,1,0,2,5,3]返回原创 2022-04-24 14:02:20 · 132 阅读 · 0 评论