leetcode-1460. 通过翻转子数组使两个数组相等
1460. 通过翻转子数组使两个数组相等
图床:blogimg/刷题记录/leetcode/1460/
刷题代码汇总:https://www.cnblogs.com/geaming/p/16428234.html
题目
思路
首先,这是一道“简单”的题,其次这是一道“简单”题。(hhh,主要是我一开始也没想到实际上很简单,主要是思路。
在一个数组arr
中,如果可以选择arr
的任意非空子数组并将其翻转,则我们可以知道,经过多次这样的操作可以互换任意两个位置的数字,而其他位置的数字不变。
例如:
故,对于两个序列arr
我们只需要统计出现的元素及元素的个数是否相同即可。
解法
通过hash表来进行判断。
C++:unsorted_map无序映射
这个方法的空间和时间耗费比较高,没有直接排序后进行比较快。
class Solution {
public:
bool canBeEqual(vector<int>& target, vector<int>& arr) {
unordered_map<int,int>count1,count2;
//计数
for (int num:target){
count1[num]++;
}
for (int num:arr){
count2[num]++;
}
//比较两个序列
if(count1.size()!=count2.size()){
return false;
}
for(auto &[key,value]:count1){
if(!count1.count(key)||count2[key]!=value){
return false;
}
}
return true;
}
};
Python:使用Counter类
class Solution:
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
return Counter(target) == Counter(arr)
排序
C++:
class Solution {
public:
bool canBeEqual(vector<int>& target, vector<int>& arr) {
sort(target.begin(),target.end());
sort(arr.begin(),arr.end());
return target==arr;
}
};
Python:
class Solution:
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
return sorted(target) == sorted(arr)