LeetCode 1640. Check Array Formation Through Concatenation
原题链接
简单
作者:
孤独时代的罗永浩
,
2020-11-01 15:29:16
,
所有人可见
,
阅读 887
(哈希) $O(n)$
先给arr数组中所有元素一个编号即下标,因为数组中元素没有重复的,所以不用考虑重复元素
依次遍历pieces,验证里面的每一个子数组中的元素在哈希中的对应值是否是连续的即可
C++ 代码
class Solution {
public:
bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {
unordered_map<int, int> hash;
for(int i = 1; i <= arr.size(); i++)
hash[arr[i - 1]] = i;
for(auto item : pieces)
{
int last = -1;
for(auto it : item)
{
if(hash[it] == 0)
return false;
if(last == -1)
last = hash[it];
else
{
int now = hash[it];
if(now != last + 1)
return false;
else
last = now;
}
}
}
return true;
}
};