回文链表
给定一个链表的头结点 head
,判断链表删除一个节点后是否可以成为「回文链表」。
若可以,则返回 true
;否则返回 false
注意:
- 输入用例均保证链表长度 大于等于 3
示例 1:
输入:
head = [1,2,2,3,1]
输出:
true
解释:如下图所示,蓝色结点为删除的结点
删除该节点后,链表为「回文链表」[1,2,2,1]
,返回true
首先把链表取出换成更好处理的数据结构
初步想法是对每个节点遍历尝试删除,再判断删除之后的表是不是回文。这样处理的复杂度是O(n^2)在1e5的数据量下会超时。
回文的处理一般都需要用到双指针算法,俩指针同时动,如果碰到不相等就向下试探,并且记录不一样的个数,如果超过一个直接返回False,可以做到在O(n)的复杂度下完成题目
存在一个 n x n
大小、下标从 0 开始的网格,网格中埋着一些工件。给你一个整数 n
和一个下标从 0 开始的二维整数数组 artifacts
,artifacts
描述了矩形工件的位置,其中 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++,对于每一个工件单独判断