- 博客(6)
- 收藏
- 关注
原创 代码随想录Day7 | 哈希表02-leetcode454、383、15、18
通过两两分组的方式遍历可以降低时间复杂度为O(n^2)。先遍历nums1和nums2,计算两数之和添加到哈希表中。再遍历nums3和nums4,计算0-nums3-nums4是否在哈希表中,若存在则count++
2023-07-19 23:04:49 519
原创 代码随想录Day6 | 哈希表01-leetcode242、349、202、1
若指针指向的元素相等,则判断元素是否重复,不重复则加入result中,否则跳过。其实一上来的想法就是像上一道题一样使用数组结构的哈希表,但由于题目中nums中的数据范围较大,因此设置hash[1000]的数组可能会造成极大的空间浪费,因此放弃使用数组结构的哈希表。遍历数组,存储当前值和坐标,并计算target - nums[i]是否存在,若存在则返回当前下标和查找到的元素的下标。将nums1转换成哈希表的形式存储,遍历nums2查找在哈希表中是否存在,存在则加入result。1.set结构的哈希表。
2023-07-18 18:35:58 726 1
原创 代码随想录Day4 | 链表02-leetcode24、19、面试题02.07、142
双指针p1、p2,分别指向每次需要交换的节点。交换过程为p2的next指向p1,p1的next指向p2的next,。- 直接返回head,无需做任何修改- 添加虚拟头节点。
2023-07-18 18:35:08 776 1
原创 代码随想录Day3 | 链表01-leetcode203、707、206
链表中元素的添加和删除关键是要。对于删除操作,链的修改涉及将待删除元素的前一个元素指向待删除元素的后一个元素,因此在判断当前元素是否需要删除时,要记录当前元素的前后指针。根据上述描述,删除操作需要记录当前结点的前一个指针,而对于头结点而言没有前一个指针,因此对于将头结点单独考虑。对于后续结点,首先记录前一个结点再判断当前结点是否需要删除,若删除则将前一个结点指向当前结点的next。
2023-07-15 19:33:42 1231 1
原创 代码随想录Day2 | 数组02- leetcode977、209、59
有序数组 --> 平方的最大在两端 --> 双向指针找到绝对值最大的首尾指针指向数组的两端,每次判断绝对值较大的一个,求取绝对值后存在新数组的最后。。时间复杂度:O(n)
2023-07-15 11:41:42 1182 1
原创 代码随想录Day1 | 数组01- leetcode 704、27
举例来说:对于数组A[n] = [0,1,1,...,1,1,2],当需要删除元素0时,快慢指针需要移动0后续的所有元素,得到的结果为A[n-1] = [1,1,...,1,1,2],而相向双指针仅需一次替换将2替换到最前,得到的结果为A[n-1] = [2,1,1,...,1,1]。算法描述:双指针法,快慢指针同时从头遍历,遇到待移除元素时慢指针停止,快指针继续移动直到遇到第一个不需要移除的元素,此时将快指针指向的元素拷贝到慢指针指向的数组位置,拷贝完成后,快慢指针继续同步移动,直至快指针遍历完数组。
2023-07-12 21:39:24 1749
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人