0
点赞
收藏
分享

微信扫一扫

双指针算法5.4

求阙者 2022-05-05 阅读 69

回文链表

给定一个链表的头结点 head,判断链表删除一个节点后是否可以成为「回文链表」。
若可以,则返回 true;否则返回 false

注意:

  • 输入用例均保证链表长度 大于等于 3

示例 1:

首先把链表取出换成更好处理的数据结构

初步想法是对每个节点遍历尝试删除,再判断删除之后的表是不是回文。这样处理的复杂度是O(n^2)在1e5的数据量下会超时。

回文的处理一般都需要用到双指针算法,俩指针同时动,如果碰到不相等就向下试探,并且记录不一样的个数,如果超过一个直接返回False,可以做到在O(n)的复杂度下完成题目

2201. 统计可以提取的工件

存在一个 n x n 大小、下标从 0 开始的网格,网格中埋着一些工件。给你一个整数 n 和一个下标从 0 开始的二维整数数组 artifactsartifacts 描述了矩形工件的位置,其中 artifacts[i] = [r1i, c1i, r2i, c2i] 表示第 i 个工件在子网格中的填埋情况:

  • (r1i, c1i) 是第 i 个工件 左上 单元格的坐标,且
  • (r2i, c2i) 是第 i 个工件 右下 单元格的坐标。

你将会挖掘网格中的一些单元格,并清除其中的填埋物。如果单元格中埋着工件的一部分,那么该工件这一部分将会裸露出来。如果一个工件的所有部分都都裸露出来,你就可以提取该工件。

给你一个下标从 0 开始的二维整数数组 dig ,其中 dig[i] = [ri, ci] 表示你将会挖掘单元格 (ri, ci) ,返回你可以提取的工件数目。

生成的测试用例满足:

  • 不存在重叠的两个工件。
  • 每个工件最多只覆盖 4 个单元格。
  • dig 中的元素互不相同。

模拟题,还是模拟思路出现了一些问题类似5.3日的2207. 字符串中最多数目的子字符串,开始思路是把所有的格子埋入工件,每次挖到就-1,如果减到0了ans++。

复杂度一样但是代码实现较为复杂,题解的思路为遍历dig数组挖开所有的区域,然后在工件数组中遍历每个格子,如果有一块没有挖开的就返回False,如果最后没有False就ans++,对于每一个工件单独判断

举报

相关推荐

0 条评论