![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题-python实现
文章平均质量分 88
代码随想录刷题记录
emmmmXxxy
这个作者很懒,什么都没留下…
展开
-
leetcode刷题-字符串01
使用双指针法来去移除空格,最后resize(重新设置)一下字符串的大小,就可以做到O(n)的时间复杂度,O(1)的空间复杂度。代码看了好久才明白,整体思路为:删除空格时,按照27.移除元素的思路进行【while部分代码】,但是需要在每个单词前面添加一个空格(除了第一个单词)【if部分代码】由于python中字符串是不可变类型,所以反转单词的时候,需要将其转换成列表,然后通过join函数再将其转换成列表,所以代码实现略有不同。先将整个字符串反转(此时单词本身也倒序了),再将里面对的单词反转一次。原创 2024-04-24 13:16:37 · 405 阅读 · 2 评论 -
leetcode刷题-哈希表02
一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用。哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。接下来是常见的三种哈希结构:数组set(集合)map(映射)在C++语言中,set 和 map 都分别提供了三种数据结构,每种数据结构的底层实现和用途都有所不同。数组作为哈希表。原创 2024-04-16 22:27:06 · 841 阅读 · 0 评论 -
leetcode刷题-哈希表01
set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,它不会插入相同键值的元素,而采取忽略处理。哈希表擅长:给你一个元素,判断在集合里是否出现过,再具体分析用数组、set还是map:如果数值很大不适合用数组,而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。既要获取这个元素的值,又要获取这个元素的下标,用数组和set都不行了,用map,key(元素):value(下标)。原创 2024-04-16 16:53:07 · 566 阅读 · 0 评论 -
leetcode刷题-链表02
fast指向第n+1个节点(为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作))可想而知,无论n为多少,x都等于z,所以判断存在环之后,要寻找环形的入口节点,定义index1和index2,让它们同时移动就可以了(另一个快慢指针),即进入环后快指针每次距离慢指针都减少一个节点,所以它们一定会相遇,而不会出现快指针跳过慢指针的情况,并且在慢指针进入环的第一圈就会相遇。fast指向第n-1个节点。快指针走了x+y+n(y+z)个节点,n是快指针转的圈数,n≥1。原创 2024-04-11 14:27:45 · 693 阅读 · 1 评论 -
leetcode刷题-链表01
C/C++中定义链表节点的方式// 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数// 初始化节点// 也可使用默认构造函数初始化节点python中定义链表节点的方式。原创 2024-04-10 22:06:53 · 1632 阅读 · 1 评论 -
leetcode刷题-数组2
2)滑动窗口法:类似双指针法,用一个for循环做两个for循环的事情,j指向滑动窗口的终止位置,如何动态调整起始位置?如果两端的值一样大(nums[l]==nums[r]),先更新哪个都可以,代码可直接写 if…1)最直接的想法:两层for循环遍历所有可能的区间,再取长度最小的(暴力解法),时间复杂度O(n^2)因为平方后最大值也一定是在两端,所以比较两端的数平方后的大小,可实现从大到小排序,题目要求,按。两层循环,第一层循环找要删除的数组元素,第二层for循环把后面的元素一个一个向前覆盖。原创 2024-04-09 22:26:21 · 578 阅读 · 0 评论 -
leetcode刷题-数组01
左闭右开,左开右闭?(两种写法)原创 2024-04-08 21:18:44 · 850 阅读 · 0 评论