自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 剑指offer——链表中倒数最后K个结点

时间复杂度:第一个指针走到末尾,O(n);空间复杂度:没有借助额外的空间,所以为O(1)。

2024-01-31 14:10:51 365

原创 剑指offer——调整数字顺序使奇数位于偶数前面

新建一个数组,先复制一份原数组,计算出奇数的个数,也就是能够知道第一个偶数应该放在数组的哪个位置,然后再遍历一遍,依次放到对应的位置即可。返回值:[5,7,2,4,6]返回值:[1,4,5,7,6]输入:[2,4,6,5,7]输入:[1,3,5,6,7]返回值:[1,3,2,4]输入:[1,2,3,4]

2024-01-31 13:53:41 443

原创 剑指offer——表示数值的字符串

如果前面已经出现过E,或者前面没有数字,直接返回false,否则,hasE置为false,也就是E后面可以继续出现符号数字和小数点了。前面如果出现过数字或者符号或者小数点,都不是合法的,否则hasSign置为true,表示符号出现过。前面如果已经有小数点或者E出现了,那么就是非法的,返回false,否则hasDot置为true。最后也需要跳过空格,判断是否合法的条件是:是否到达最后一个字符,并且出现过数字。2、(可选)一个符号字符(' + '或' - ')2、(可选)一个符号字符(' + '或' - ')

2024-01-31 13:30:29 362

原创 剑指offer——正则表达式匹配

1、如果pattern长度为0str长度为0,说明刚刚好匹配完,返回true;str长度不为0,说明没有匹配完,返回false;2、如果pattern的长度大于03、如果pattern的长度大于1,且第二个字符是*,说明前面的字符可以匹配0,1或者多次。分为两种情况:一种是直接把*和*前面的字符去掉,相当于匹配了0个,然后接着比较;另一种是,如果str的长度大于0,并且第一个字符匹配,那就把str的第一个字符去掉,两者接着匹配。

2024-01-31 10:09:21 901

原创 剑指offer——删除链表的节点

如果我们要删除链表里面的一个节点,其实就是将前置节点的next直接指向当前节点的后置节点,这样在链表中再也找不到该节点了,也就是相当于删除了。题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为2 -> 1 -> 9。给定链表中值为1的第三个节点,那么在调用了你的函数之后,该链表应变为2 -> 5 -> 9。输入:{2,5,1,9},5。输入:{2,5,1,9},1。

2024-01-28 08:00:00 358

原创 剑指offer——数值的整数次方

如果指数是负数,则先取反,然后取结果的倒数。输入:2.00000,3。输入:2.10000,3。返回值:8.00000。返回值:9.26100。

2024-01-27 09:00:00 350

原创 剑指offer——打印从1到最大的n位数

用Math.pow(10,n) - 1取出最大的边界条件。

2024-01-27 09:00:00 374

原创 剑指offer——二进制中1的个数

还有一种方法是不断地把最右边的1变成0,那就是利用n = n&(n-1),比如7的二进制是111,那么7&6 = 111 & 110 = 6,就完成把最后一位1变成0了,6的二进制是110,6 & 5 = 110 & 101 =100 =4,也把最后一位变成了0。(由于负数右移,第一位补1,还是负数,也就是说-1 其实右移之后还是-1,这样判断是无效的,而且会死循环)所以,这时我们将1左移就可以了。题目描述:输入一个整数,输出该数32位二进制中1 的个数,其中负数用补码表示。

2024-01-26 09:00:00 371

原创 剑指offer——剪绳子

每个长度的绳子,要么最长的情况是不剪开(长度是本身),要么长度是剪开两端的乘积。初始化值 长度为1的值为1,从长度为2开始,每种长度都需要遍历两个字长度的乘积。因此,要想求f(n),我们必须先把f(n-1),f(n-2)……的方法来解题:假设绳子长度为n的最大的长度为f(n),那么如何计算f(n)输入描述:输入一个数n,(2 <= n <= 60)f(n)可能是f(n-1)和f(1)的乘积。f(n)可能是f(n-2)和f(2)的乘积。f(n)可能是n,不切分的情况下。f(1) = 1,这是初始值。

2024-01-26 08:00:00 334 1

原创 剑指offer——机器人的运动范围

广度优先搜索,也就是没进行一步,优先搜索当前点的各个方向上的点,不急着往下搜索,等搜索完当前点的各个方向的点,再依次把之前搜索的点,取出来,同样先搜索周边的点... 这样直到所有都被搜索完成。这也就是广度优先搜索的本质,我们需要一个队列,来保存遍历的顺序,每次都从队列里面取出一个位置,遍历其四周的方块,每次遍历到的点,都会放到队列里面,这样直到队列为空的时候,也就是全部遍历完成。在上面的过程图示中,我们可以发现,访问是有顺序的,每遍历一个新的方块,都会标一个顺序,然后按照顺序遍历其四个方向。

2024-01-25 09:00:00 423

原创 剑指offer——矩阵中的路径

时间复杂度: 最坏的情况是将棋盘的每个位置都遍历一次,而每个位置除首字母外都不能走已经走过的位置,故四个方向只有三个方向可以选择,故时间复杂度为 O(mn*k^3^),空间复杂度: 借助了额外的空间表示是否被访问过,空间复杂度为。对于每一个字符为起点,递归向四周拓展,然后遇到不匹配返回。,匹配则接着匹配直到完成,里面包含了。

2024-01-24 14:00:00 956 1

原创 剑指offer——旋转数组的最小数字

也就是本来是递增的,如果旋转后,肯定会出现先递增,再递减的情况,只要我们找出这个点,其实就是最小的值。采用二分法编写的时间复杂度为O(logN),没有另开辟空间,所以空间复杂度为O(1)思路及解答:这里最重要的特征是。

2024-01-24 11:00:00 350 1

原创 剑指offer——斐波那契数列

直接暴力解法:利用函数进行递归。

2024-01-24 10:00:00 338 1

原创 剑指offer——两个栈实现一个队列

有两个栈 stack1,stack2;如果有新的数据进入,我们可以直接push到stack1中;如果需要取出数据,我们可以优先取出stack2的数据,如果stack2里面的数据是空的,那么我们需要把所有的stack1的数据放入stack2中,再从stack2中取数据。

2024-01-23 10:12:24 379 1

原创 剑指offer——二叉树的下一个节点

需要判断当前节点是不是父节点的左节点,如果是父节点的左节点,那么下一个节点就是父节点。如果当前节点不是父节点的左节点,那么就是父节点的右节点,也就是下一个节点应该是父节点的父节点,或者更上一层。这个则需要根据当前节点是不是右节点来判断,如果是右节点,则还需要往父节点上走一层,如果不是右节点,则直接放回父节点。通过循环,找到根节点,然后再通过根节点,中序遍历,在中序遍历的过程中,对比节点,是否等于输入的节点,然后获取下一个节点放回。如果当前节点的右节点不为空,那么下一个节点就是右节点的最左子孙节点;

2024-01-23 09:52:21 361 1

原创 剑指offer——重建二叉树

在保证数据正确性的前提下,前序的第一个数值是root节点,即上图中的1,那么我们需要在中序遍历中找到1的位置,左边的就是root的左子树,右边是root的右子树。我们可以一开始创建一个栈,分别用两个指针执行前序遍历和中序遍历的第一个元素,先将前序遍历的第一个元素压入栈中,因为前序遍历的特性,第一个元素肯定是根节点。已经被取出来了,说明左子树全部遍历完成了,剩下的部分是它的右子树内容了,那么前序遍历中,是刚刚弹出的元素,剩下的元素都是它的右子树,那么前序遍历中指向的数组。发现不相等,那么把前序遍历中的。

2024-01-22 11:20:49 1191

原创 剑指offer——从尾到头打印链表

总结:通过以上三种方法的操作,均能实现题目中所要求的输出结果,同时在实际操作中,复习到了数据结构中的栈的相关操作、递归调用以及链表的使用等。递归方法的调用过程,就是一个天然的栈调用的过程,只需要判断当前节点是不是为空,为空则不输出,不为空则递归下一个节点,对下一个节点处理之后,把结果使用ArrayList.addAll()我们遍历每一个节点,然后把它插入到头部,这样一直遍历到尾的时候,就相当于将整个链表都反转一遍了,然后再从头到尾遍历放到。主要利用了栈的先进后出的规则,这样就可以实现倒序的功能。

2024-01-22 09:41:17 891

原创 剑指offer——替换空格

然后遍历一次,复制,当遍历的地方不为空格时,直接复制原始证据,当为空格时,则把%20三个字符复制上去。复制的时候从后面往前面开始复制,这样就可以节省一定空间,直接在原来的数组上操作。同时可以使用C++的原地扩容方法,扩容后直接在原始数组上按照从右往左的方法,将数组复制进来,并在遍历到空格时,用%20来代替复制的位置,提高了时空复杂度。1、是采样两个常规方法,分别调用java自带的函数,直接实现替换功能。是采用C++自带的扩容方法,将字符串转换成数组,遍历一次,统计出空白格的个数,构建新的数组,使。

2024-01-20 08:00:00 311

原创 剑指offer——二维数组中的查找(从左下角开始比较)

4、第一轮比较过后,如果是1、2两种情况,则需要继续进行比较,此时依旧采用左下角的值与目标值target进行比较,以此类推,直至出现3的情况为止,这样比较过后,该二维数组的查找就结束啦。依题可知,该二维数组是一个从左到右,从上到下的一个有序数组,所以,当我们假设有一个3×3的矩阵时,左下角的值一定比它所在的行值都小,比它所在二等列值都大。本期总结:通过题干所给的信息,采用最优解的方法来实现功能,可以大大提高查找效率,希望本次解题思路有帮助你拓展思考方向,后期还会继续更新,望大家共同探讨共同进步!

2024-01-19 10:27:38 505 1

原创 剑指offer——数组中重复的数字(下标法思路详解)

通过不停的交换元素使得元素和它对应的下标相等,即nums[i] = i。(当元素是有重复的时候,肯定会出现多个元素对应同一个下标,那这个时候就可以判断该数组中是否有重复的元素),时间复杂度为O(n)

2024-01-19 09:23:43 378 1

原创 剑指offer——替换空格

请实现一个函数,将一个字符串种的每个空格替换成“%20”。例如,当字符串为We Are Happy,经过替换后的字符串为We%20Are%20Happy。2、构建出新的字符数组,初始化的大小 = 原来的字符数组长度 + 空格长度 × 2。3、遍历一次,复制,当不为空格时直接复制,当为空格时,则把%20这三个字符复制过去。1、将字符串转换成字符数组,遍历一次,统计出空格的个数。

2024-01-18 13:15:15 330 1

原创 剑指offer——二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。直接暴力遍历,但是在最坏的情况是遍历完所有的元素才能获取结果。,则是最坏的结果,查找知道数组的右上角结束,这样一来,最坏的结果就是。需要查找 一个数字 32,则返回 true。但是我们换一种思路,我们选定左下角的。,没有借助其他的空间,空间复杂度为。小,我们应该往上找,找到了。,则下一个查找的数字是。

2024-01-18 11:06:34 451 1

原创 剑指offer——数组中重复的数字

的位置,如果下标i的位置已经有元素,那么说明冲突了,这个元素肯定是重复的,否则继续调整后面的。,因为调换的时候,很容易将后面的数字换到前面去,就会导致求解出来不是第一个重复的数字(可以用来求解任意的重复数字),可能是第。肯定是有的,不借助额外的空间,那么就只能操作原数组了。如果没有重复的情况,那么这些数字排序后,数字。以上代码的时间复杂度为O(n),因为最差的情况可能遍历完所有的元素;的数组,就可以对所有的数字进行统计个数,如果个数超过。,那么肯定是重复的数字,如果没有重复的数字,则返回。

2024-01-17 16:41:23 396

原创 【考研数据结构如何学习才最高效(二)】

考研数据结构学习

2023-09-07 16:46:23 134 1

原创 【考研数据结构如何学习才最高效(一)】

如何快速学习并掌握数据结构相关知识

2023-09-07 11:18:50 377 1

原创 PyCharm的安装及使用

PyCharm的安装及使用步骤。

2023-09-06 11:28:54 774 1

原创 pygame——猜字游戏(14行代码实现)

前提:作为pygame的新手,肯定想要采用简单的方式快速做出一个小游戏,因此编写了一个方便理解并且适合新手作为练手的小游戏,只需要14行代码就能实现,现将代码展示如下(备注:代码本人均已测试过,完全正确,如有问题,可在下方留言)pygame是一种采用Python语言编写的小游戏,语法简洁,界面清晰,步骤详细,可以带领大家很快的理解一些语法的使用,通过简单的练手之后,就可以在学习Python的相关知识点后,更加巩固对于语法的应用和实现的功能。

2023-09-06 09:21:50 1453 1

原创 Python----编写简单的pygame(编码流星篇)

大家刚开始学习使用PyCharm时,肯定觉得使用“hello world”,已经不足以展现作为程序员的水平吧,在电视上经常看见一些黑客或者红客的电脑界面中出现有编码流星图,感觉看着很高级的样子,作为小白刚开始接触使用Python,就尝试使用所学的知识,编写了一下这个小游戏界面,希望有帮助到大家的学习(友情提示:请多关注博主,后期会不定时继续更新小游戏的,均含源码)

2023-09-05 16:58:44 274

PyCahrm的安装包及使用教程

python学习的第一步——安装pycharm,这里包含有pycharm的安装步骤及路径设置,为之后系统学习Python的开发做好基础工作,方便后面对于Python代码的书写及学习

2024-06-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除