- 博客(17)
- 收藏
- 关注
原创 力扣150题--反转字符串中的单词和Z 字形变换
此题让我想起前面做过的一题,,于是可以套用此题的做法。我的做法如下:先处理掉多余的空格问题 ,利用两个循环处理掉字符串前后的所有空格。处理掉字符串间的多余空格(当遍历到一个空格时,令参数x变为1,如果x==1并且再遍历到一个空格,那么就删除这个空格,直到遍历到非空格,x=0)处理完空格,就得到一个合法的字符串,利用前面轮转数组的思路如下:hello world(原)olleh dlrow (每个单词翻转)world hello (整体翻转)
2025-04-05 15:12:35
151
原创 力扣面试150题--最后一个单词的长度和最长公共前缀
最简单想法,既然只要求最后一个单词的长度,那我们直接从后向前遍历,(特使情况,考虑最后几个字符是空格特殊处理一下),用一个计数器计数就行,遍历到空格就结束循环。
2025-04-04 13:47:27
213
原创 力扣面试150题--罗马数字转整数和整数转罗马数字
简单的想法,我们需要字符到数字的映射,于是想到了Map的结构,于是我们可以这么做:先预设map中存放字符到数字的映射。将字符串转化为字符数组(这里java和C++不一样)遍历数组,需要处理一下特殊情况。返回值。
2025-04-03 13:05:11
326
原创 力扣面试150题--分发糖果
此题初看,从前向后遍历,发现无非考虑三种情况。:官方题解提供了一个两次遍历的做法,思路如下。时间复杂度很高,需要优化算法。
2025-04-01 13:16:32
401
原创 力扣面试150题--除自身以外数组的乘积和加油站
由于要找除了自己的所有数乘积,又不能使用除法,那么直接找到该元素前面所有元素乘积和后面所有元素乘积。对于nums[i]而言,它的前半的乘积等于qian[i-1]*nums[i-1],它的后半乘积为hou[i+1]*nums[i+1]。(qian[]和hou[]是该元素前后的乘积)由此可以设置qian[0]与后[length-1]=1,这样依次获取qian和hou数组。最后 answer[i] = qian[i] * hou[i];:题目要求在O(1)的额外空间完成。需要重新规划算法。
2025-03-31 11:10:33
366
原创 力扣面试150题--H指数和 O(1)时间插入,删除和获取随机元素
关键点在于,那么直接对数组进行排序(升序),那么只要满足citations.length-i>=citations[i]就可以满足条件了,这样记录下最大值,也就是h指数了。
2025-03-30 09:25:02
231
原创 力扣面试150题--跳跃游戏和跳跃游戏II
这道题正着遍历数组会有些麻烦,原因在于你的跳跃长度是指最长的,也就是说一个点可以跳跃到不同的点,这样做的时间复杂度会很高。转化思路,从终点向前推,既然最终目的是到达终点,那么从后向前推,如果能到达终点,必然存在能一步到达终点的元素,将它设置为新的终点,只要这样一直向前判断,
2025-03-29 10:18:14
372
原创 力扣面试150题--买卖股票的最佳时机和买卖股票的最佳时机II
判断每个元素买入时能获得的最大利润,保留最大的利润即可。····:没过,因为测试集中有大量数据,超出时间限制,需要优化算法。:初次想法时间复杂度过高的原因在于重复遍历后面数组,而本质应该寻找在每个元素后的元素最大值,那么转化思路,,使用min来记录其后的较大值,在没遇到比他还大的值,说明在这个段内,他就是卖出的最好时机。由此有了以下做法。
2025-03-28 08:56:41
143
原创 力扣面试150题-多数元素和轮转数组
采取哈希表的方式,但是发现元素范围太大,没有办法申请这么大的空间,于是想到了使用map这种键对值的做法,于是采取来完成。利用()判断这个元素是否存在于map中:不存在则插入,设定value为1存在则使其value+1最后判断这个元素是否大于n/2;大于则直接中断循环,输出即可。:通过了,但最后提交时发现时间复杂度爆炸了,还浪费了空间,不是个好办法:下方进阶做法要求了时间和空间复杂度,于是重新思考。既然每个数组都必然有出现次数大于n/2的元素,那这个元素必然是数组中出现。
2025-03-27 15:35:14
267
原创 力扣面试150题-删除有序数组中的重复项和删除有序数组中的重复项II
给你一个的数组 nums ,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的 相对顺序 应该保持。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k。判题标准:系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案。
2025-03-26 15:11:39
562
原创 力扣面试150题-合并两个有序数组和移除元素
给你两个按排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你nums2 到 nums1 中,使合并后的数组同样按排列。:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n。:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?
2025-03-25 21:17:44
853
原创 MySQL基础笔记
#MySQL基础笔记##一·数据库基础概念1.数据库英文:database 简称DB2.数据库特点:1.持续化存储数据,数据库就是一个文件系统。2.方便存储和统一管理。3.使用同一方式操作数据库-----SQL。二·数据库登录的几种方式1.利用win+r->cmd->输入mysql -uroot -proot。2.直接使用图形化界面SQLyog。3.利用win+r->cmd->输入mysql -uroot -p->输入密码登录。4.利用win+r->
2021-02-17 22:07:27
4334
5
原创 java中关于字符串的string
JAVA中声明字符串一般使用string(和C无区别)常用的构造法是如下模板:String s=new String("你要输入的内容");字符串间的连接如果要把两个字符串合并 ,一般使用’+‘,例如:String s1=new String("abc");String s2=new String("cde");String s3 =s1+" "+s2;System.out.println(s3);s3就是abc cde。利用+还可以让字符串和其他类型的数据类型连接,在+后面加入即
2020-09-16 22:48:26
312
原创 哈夫曼树的建立以及编码
哈夫曼树的原理结论带权路径长度WPL最小的二叉树(WPL:从根到某点的长度与该点的权值相乘的所有点的和)哈夫曼树的节点数=2*叶子数-1(叶子数就是你输入的点数)哈夫曼树的构造方式从叶子选择权值最小的两个点组成一个节点将组合的这两个节点的父亲节点指向你组成的这个节点将你组成的节点的左右儿子节点指向这两个点(小的在左 大的在右)将该节点的权值加入叶子中重复1哈夫曼编码从根节点开始到该点的距离就代表你编码的长度左儿子的编码单元是0 右儿子的编码单元是1从根节点到该点的所有点的编
2020-07-30 17:25:51
841
原创 二叉树中前序 中序 后序的互推
最近开始复习数据结构,就从二叉树开始吧1.复习前序 中序 后序结构:前序:根(左子树)(右子树)中序:(左子树)根 (右子树)后序:(左子树)(右子树)根2. 前序+中序->后序由于前序的结构,第一个是根,中序中根的位置是介于左子树和右子树,所以我们可以通过前序获得根,通过中序将二叉树分裂,由于后序中的根在最后一个,所以我们可以通过先左后右依次将分裂到最小的树的根存储即可,所有这明显是个递归思想,看代码吧样例:前序:BAGCDZHKX中序:ACGDBHZKX#include<
2020-07-27 16:50:41
1009
原创 洛谷P1957 口算练习题
题目描述 王老师正在教简单算术运算。细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如5+8的算式最好只要输入5和8,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=13 以及该算式的总长度6。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。输入格式 第一行为数值i接着的i行为需要输入的算式,每行可能有三个数据或两个数据。若该行为三个数据
2020-07-25 21:54:19
697
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人