链接:https://leetcode.cn/problems/check-array-formation-through-concatenation/solution/-by-xun-ge-v-05ej/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
简单模拟 题目已经明确了要求和怎么连接,我们遍历枚举arr中第一个元素,在pieces中寻找arr元素对应的元素,如果找到了对应元素,就判断当前位置pieces是否还有剩余元素需要连接,存在就进行连接,不存在就枚举下一个arr元素,只要有一个匹配不上或者arr在pieces上找不到对应的元素对应就返回false;
哈希简化 在寻找arr对应pieces元素时,可以通过哈希进行简化,就不需要每次都枚举pieces中所有元素,可以先将pieces每一个位置对于的首元素为键加入哈希表,并同时保存对应下标,枚举arr中元素时只需要在哈希表中寻找是否存在arr元素对应的键值即可
代码
bool canFormArray(int* arr, int arrSize, int** pieces, int piecesSize, int* piecesColSize){for(int i = 0; i < arrSize; )//枚举arr中元素{bool logo = false;//判断是否寻找到元素,没有则返回falsefor(int j = 0; j < piecesSize; j++)//枚举p中元素,寻找对应位置{if(pieces[j][0] != -1 && arr[i] == pieces[j][0])//符号对应位置{logo = true;for(int k = 0; i < arrSize && k < piecesColSize[j]; k++)//判断是否存在剩余元素{if(arr[i] != pieces[j][k])//剩余元素不匹配{return false;}i++;pieces[j][k] = -1;//匹配了的位置清空,防止重复判断}}}if(logo == false){return false;}}return true;}作者:xun-ge-v链接:https://leetcode.cn/problems/check-array-formation-through-concatenation/solution/-by-xun-ge-v-05ej/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。