LeetCode 1640. 能否连接形成数组
给你一个整数数组 arr ,数组中的每个整数 互不相同 。另有一个由整数数组构成的数组 pieces,其中的整数也 互不相同 。请你以 任意顺序 连接 pieces 中的数组以形成 arr 。但是,不允许 对每个数组 pieces[i]中的整数重新排序。
如果可以连接pieces中的数组形成arr,返回true,否则返回false 。
使用unordered_map查找起来比较方便,并且查找速度最快能到O(1),与哈希函数的质量有关,最差查找情况速度为O(n):
class Solution {
public:
bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {
unordered_map<int, vector<int>*> m; // 存放以子数组中第一个元素为键,指向子数组的指针为值的map
for (vector<int>& sub : pieces) {
m[sub[0]] = ⊂
}
for (int i = 0; i < arr.size(); ++i) {
auto it = m.find(arr[i]);
if (it == m.end()) { // 如果数组数组中没有符合条件的子数组
cout << "it == m.end() and now i = " << i << endl;
return false;
}
for (int iInPieces : *(it->second)) {
cout << iInPieces << endl;
if (iInPieces != arr[i]) { // 如果子数组中的数字不符合条件
cout << iInPieces << " != " << arr[i] << endl;
return false;
}
++i;
}
--i; // 由于循环的最后i会自增,所以最后相当于i自增了两次
}
return true;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)