代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串
代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串344.反转字符串
题目链接:344.反转字符串文档讲解:344.反转字符串视频讲解:344.反转字符串目标:学习reverse函数的使用,明确使用库函数的条件状态:比较简单🤗
学习前的想法需要编写一个函数,其作用是将输入的字符串反转过来,要求空间复杂度为O(1),即不使用额外的空间,原地修改数组。
考虑到字符串像数组一样,可以使用两个指针分别从字符串的起始位置和终止位置遍历,交换两个指针的值即可。
需要考虑到的问题是字符串中字符是奇数个还是偶数个,假设我的两个指针分别为left和right,字符串为s,则left = 0, right = s.size() - 1。
每次交换后,left++, right--,显然需要使用一个循环来实现,那么我们的循环结束条件是什么呢?
当字符数为奇数时,中间的字符不需要交换,当left = right时,循环终止,当字符数为偶数时,中间的两个数交换后,left++,right--,当left ...
代码随想录算法训练营第七天| 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和、总结
代码随想录算法训练营第七天| 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和、总结454.四数相加II
题目链接:454.四数相加II文档讲解:第454题.四数相加II视频讲解:学透哈希表,map使用有技巧!LeetCode:454.四数相加II目标:状态:想到了两个数组比较好处理,没想到把四个数组两两结合形成新的两个数组🤪
学习前的想法题目要求从四个数组中分别找出一个数,使这四个数相加等于0,并返回符合要求的下标元组数目,即四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以。
这道题可以说是昨天两数相加的plus版本,两个数的求和组合方式比较少,容易找出和为目标值的组合,但是四个数组合方式太多,想不到如何解决。
学习后的想法假设有a,b,c,d四个数组,就像我上面所说,两个数相加等与一个数比较容易判断,因此我们将a + b所有可能的值当成一个数组,而c + d所有可能的值当作一个数组,这样就可以将其转化为两数相加了。
我们依然使用unordered_map数据结构来实现,因为其高效的查找效率。
key为a和b两个数 ...
代码随想录算法训练营第六天| 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天| 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和哈希表理论基础
文档讲解:哈希表理论基础视频讲解:目标:了解哈希表的内部实现原理,哈希函数,哈希碰撞,常见哈希表的区别,数组,set 和 map状态:场景:> 当我们遇到了需要快速判断一个元素是否出现集合里的时候,就需要考虑哈希法
哈希表要点哈希表,Hash Table,散列表,指的都是同一个东西,在本文中,我们采用哈希表的叫法。
哈希表是根据关键码的值而直接进行访问的数据结构,学过python的可能知道字典dict这个数据结构,其中的键值对的逻辑和哈希表就很相似。
关键码就是一个元素的索引,就像在数组中,我们可以直接通过下标来对数组中的元素进行访问,因此下标即 0, 1, ..., n就是其关键码。
哈希表能解决什么问题?
一般哈希表可以快速判断一个元素是否出现集合里。
假如我们需要在数据库中查询一个名字,遍历即枚举的时间复杂度是O(n),而使用哈希表的话只需要O(1)就能做到。
哈希函数
我们一般会使用哈希函数,将数据直接映射为哈希表上的 ...
代码随想录算法训练营第四天-24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II、总结
代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II 、总结24. 两两交换链表中的节点
题目链接:24. 两两交换链表中的节点文档讲解:24. 两两交换链表中的节点视频讲解:帮你把链表细节学清楚! | LeetCode:24. 两两交换链表中的节点目标:状态:独立使用虚拟头节点AC
学习前的想法在第三天的学习中,我学习了虚拟头节点的使用,本题的目的是将链表中的节点两两交换。
根据题目的图示可以知道,题目只要求了交换刚开始的相邻节点,即假设有四个元素a, b, c, d,我们只需交换ab和cd即可。(当然想要完成每个元素和其后一个于元素交换也能很轻松的实现,只需修改一行代码😼)
使用虚拟头节点,并声明两个指针用来存储位置信息,具体思路如下图所示:
建议参考我的一下代码来理解这张图(图画的不好见谅🤪):12345678910111213141516171819class Solution {public: ListNode* swapPairs(ListNode* head ...
代码随想录算法训练营第三天-链表理论基础、203.移除链表元素、707.设计链表、206.反转链表
代码随想录算法训练营第三天| 链表理论基础、203.移除链表元素、707.设计链表、206.反转链表链表理论基础
文档讲解:关于链表,你该了解这些!视频讲解:无目标:理解链表基础,以及链表和数组区别状态:😸
链表要点链表中存在若干节点,每一个节点由数据和指针组成,通过指针将其串联成线性结构。
链表有一个入口节点,我们把它叫做头节点head,一般来说,头节点中不含有数据,它作为一个指示符指向链表中含有数据的第一个节点。
2024/2/23注意,在其他情况下,头节点可能就是链表的第一个节点,比如下面的题目
链表的几种类型:
单链表:一个指针域,一个数据域
双链表:两个指针域(分别指向前置和后继节点),一个数据域
循环链表:首尾相连的链表,可以是单链表也可以是双链表
存储方式:
数组在内存中连续存储,链表在内存中散列存储,有效的利用了内存中的碎片化空间。学过操作系统的话,可能会知道fragment这个名词,意思就是碎片的意思。
C++相关链表的定义1234567//单链表struct ListNode { ElemType data; // 节点存储的元素 ListNode ...
代码随想录算法训练营第二天-977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结977.有序数组的平方
题目链接:977.有序数组的平方文档讲解:977.有序数组的平方视频讲解:977.有序数组的平方状态:暴力法能够解决,双指针法自己也想到了,思路和卡哥基本一致,学习一下卡哥的代码书写😸
学习前的想法给出的题目建议是理解双指针的思想,因此我下面将会先考虑暴力方法解决,之后独立思考一下双指针法如何实现。
顾名思义,我们需要对一个增序排列数组中的每个元素求平方,得到一个每个数字平方所组成的增序排列数组。
首先考虑暴力法求解,即求出每个元素的平方,将其重新排序,在这里我使用冒泡排序对新数组重新排序:
1234567891011121314151617181920class Solution {public: vector<int> sortedSquares(vector<int>& nums) { for(int k = 0; k < nums.size(); k++) ...
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素数组理论基础
文档讲解:数组理论基础视频讲解:暂无状态:😀
数组要点
数组是存放在连续内存空间的相同类型数据的集合。
数组的下标都是从0开始的。
数组内存空间的地址是连续的。
数组中的元素不能删除,只能进行覆盖。
所以增删元素的时候需要对其他元素的地址做相关操作。
C++相关
在C++中,vector和array存在区别,vector的底层实现是array,严格来说vector是容器,不是数组。
在C++中,二维数组在内存空间上是连续分布的。
704.二分查找
题目链接:704. 二分查找文档讲解:704. 二分查找视频讲解:二分查找法目标:熟悉根据 左闭右开,左闭右闭 两种区间规则 学出来的二分法状态:以前的方法全都忘记了,边界条件含糊不清,还是要多总结
学习前的想法因为平常也了解过一些简单的算法,加上学校上课提到的,二分查找的基本思想我是了解的,只需不断的将区间的中位数与目标值作比较,选择左右区间,直到找到目标值或数组越界。
尝试写出代码如下(错误):12345678910111213141516171 ...
test
测试blog功能
Python数据分析:数据加载与存储(六)
第六章读写文本格式的数据pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv和read_table可能会是我们今后用得最多的。
我将大致介绍一下这些函数在将文本数据转换为DataFrame时所用到的一些技术。这些函数的选项可以划分为以下几个大类:
索引:将一个或多个列当做返回的DataFrame处理,以及是否从文件、用户获取列名。
类型推断和数据转换:包括用户定义值的转换、和自定义的缺失值标记列表等。
日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列。
迭代:支持对大文件进行逐块迭代。
不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西(比如由成千上万个逗号隔开的数值数据)。
因为工作中实际碰到的数据可能十分混乱,一些数据加载函数(尤其是read_csv)的选项逐渐变得复杂起来。面对不同的参数,感到头痛很正常(read_csv有超过50个参数)。pandas文档有这些参数的例子,如果你感到阅读某个文件很难,可以通过相似的足够多的例子找到正确的参数。
其中一些函数,比如panda ...
关于hexo deploy时Spawn Failed的几种解决方案
前言昨天晚上,我兴致勃勃的打开了cmd窗口,准备写一篇有关了解Kaggle的博客,当我文思泉涌,啪嗒啪嗒地码完整篇文章,理所当然地执行hexo clean && hexo g && hexo d部署到github时,终端窗口冷不丁地弹出了几行绚丽的错误:1234567Please make sure you have the correct access rights and the repository exists.FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.htmlError: Spawn failed at ChildProcess.<anonymous> (D:\blog\hexo\node_modules\hexo-util\lib\spawn.js:51:21) at ChildProcess.emit (node:events:513:28) ...