双指针算法5.4

回文链表

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

注意:

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

示例 1:

输入:head = [1,2,2,3,1]

输出:true

解释:如下图所示,蓝色结点为删除的结点
删除该节点后,链表为「回文链表」 [1,2,2,1],返回 true
 

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

初步想法是对每个节点遍历尝试删除,再判断删除之后的表是不是回文。这样处理的复杂度是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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值