- 博客(9)
- 收藏
- 关注
原创 数据结构学习笔记
程序=数据结构+算法数据结构要处理的信息算法是处理信息的步骤值得注意的特性:数据元素同类型、有限、有序重要术语表长、空表表头、表尾前驱、后继数据元素的位序(从1开始)逻辑上相邻的数据元素物理上也相邻单链表用“链式存储”(存储结构)实现了“线性结构”(逻辑结构)一个节点存储一个数据元素各结点间的先后关系用一个指针表示用代码定义一个单链表//单链表的定义 typedef struct Node {int data;
2023-07-24 21:11:17
841
原创 leetcode刷题记录——字符串转换整数(atoi)
int类型是有符号的,因此,32位并不会全部用来存储数据,使用最高位来存储符号,最高位是0,提示数据是正数,最高位是1,表示数据是负数,使用其他的31位来存储数据。这个问题其实没有考察算法的知识,模拟的是日常开发中对于原始数据的处理(例如「参数校验」等场景),如果面试中遇到类似的问题,应先仔细阅读题目文字说明和示例,有疑惑的地方和需要和面试官确认,在编码的时候需要耐心和细心地调试。通过设定i移动字符下标,t为对应数,sign为判断正负,解析为整数用的是ASCII码来获取的,再设定边界条件输出。
2023-03-12 00:11:45
133
原创 leetcode刷题记录——整数反转
res的正负值是根据x来的,因为res的初始值等于x%10也就直接决定了res的值是否是正或负,而res的后续值是根据初始res值来进行变化的。首先是获取输入整数的位数n,从i位数取10^(i+1)的余数再除以10^i就获得i+1位数,再乘以反转后对应的10^(n-i-1)就获得反转后对应的数,最后循环遍历相加起来就得到反转数。if (iINT_MAX/10) { //注意,循环的过程中就要判断是否会 溢出。// 时长:0ms 空间:5.6MB。
2023-03-11 02:19:54
131
原创 leetcode刷题记录——N字变换
对于循环最常用的就是取%运算,通过简单观察可知,循环体的长度为2numSize -2有了循环体长度之后,自然是对s[i]取模了,即s[i] % (2numSize -2)现在开始分类0 % (2numSize -2) = 0;判断条件:j % (2numSize -2) == i || j %(2numSize -2) == 2*numSize - 2 - i。这题明显是个找规律的题, 观察图形可以知道“循环体”为一个"Z"字,即0-7,8-15是一个循环。// 时长:8ms 空间:5.4MB。
2023-03-09 23:55:51
104
原创 leetcode刷题记录——最长回文子串
编写一个判断回文数函数,设定i,j,k,一个len=1,一个返回字符串w, k遍历字符串,i=k遍历,j从字符串尾部开始向前遍历,直到j
2023-03-09 04:53:17
104
原创 leetcode刷题记录——寻找两个正序数组的中位数
最后就是二分法的核心啦,比较这两个数组的第K/2小的数字midVal1和midVal2的大小,如果第一个数组的第K/2个数字小的话,那么说明我们要找的数字肯定不在nums1中的前K/2个数字,所以我们可以将其淘汰,将nums1的起始位置向后移动K/2个,并且此时的K也自减去K/2,调用递归。这里对于两个有序数组也是一样的,假设两个有序数组的长度分别为m和n,由于两个数组长度之和 m+n 的奇偶不确定,因此需要分情况来讨论,对于奇数的情况,直接找到最中间的数即可,偶数的话需要求最中间两个数的平均值。
2023-03-08 02:26:15
101
原创 leetcode刷题记录——无重复字符的最长子串
创建一个长度为1000的int型数组列表,遍历字符串到长度减1,每次遍历时创建一个空字符串,再进行上次循环加1的遍历操作,用编写的字符串中是否有该字符判断进行控制,后续保存每次遍历时的无重复字符串,并将每次保存的字符串长度存入数组中,最后通过判断数组中最大值。记录左边界l,遍历右边界r,当扩展右边界r后,判断s[l:r-1]切片内是否有和右边界字符相同的字符,如果有左边界转移到该切片中最后一个与右边界字符相同的字符的下一位(这里从右到左遍历切片最快)。// 时长:0ms 空间:2.3MB。
2023-03-07 03:29:19
121
原创 leetcode刷题记录——两数相加
这道题对于我来说因为对链表不是很熟悉,实现的过程较为乱,在学习了大佬的思路后让我知道了新的思路,学到很多,自己在链表上的东西还是欠缺很多。获取两个链表中的最长的链表的长度循环的对空链表添加两个链表每个结点对应的值的和,当短链表为空时只插入剩下长链表的值。设置一个b处理进位。本来没想给新结点的next赋值,可是报错啊,百度了一下,不赋值就是野指针,C语言不允许。// 如果l1指向非空,则将l1的值加到t上,l1指向l1的下一个结点。// 如果l2指向非空,则将l2的值加到t上,l2指向l2的下一个结点。
2023-03-06 00:56:03
116
原创 leetcode刷题记录——两数之和:
对数组做两次遍历,第一次遍历i到从0零到数组长度-1的位置,第二次遍历j从数组i+1开始到数组长度,判断如果数组i下标的值和数组j下标的值相加是否等于目标值,等于则返回下标i和下标j组成的数组列表。用Map集合思路,通过对数组的键值对循环遍历,在空Map集合中依次把数组的下标作为值、下标值作为键添加,找出Map集合中两个键相加为目标值的数作为数组列表返回(按照自己的理解方式)。在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。
2023-03-05 02:19:25
142
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人