第1460题题目:
给你两个长度相同的整数数组 t a r g e t target target和 a r r arr arr。每一步中,你可以选择 a r r arr arr的任意非空子数组 并将它逆向翻转。你可以执行此过程任意次。
如果你能让 a r r arr arr变得与 t a r g e t target target相同,返回 T r u e True True;否则,返回 F a l s e False False。
示例1:
输入: target = [1,2,3,4], arr = [2,4,1,3]
输出: true
解释: 你可以按照如下步骤使 arr 变成 target:
1- 翻转子数组 [2,4,1] ,arr 变成 [1,4,2,3]
2- 翻转子数组 [4,2] ,arr 变成 [1,2,4,3]
3- 翻转子数组 [4,3] ,arr 变成 [1,2,3,4]
上述方法并不是唯一的,还存在多种将 arr 变成 target 的方法。
示例2:
输入: target = [3,7,9], arr = [3,7,11]
输出: false
解释: arr 没有数字 9 ,所以无论如何也无法变成 target 。
思路:
两个相邻的数之间翻转可以想到冒泡排序,所以 a r r arr arr变成 t a r g e t target target可以想象成一个特殊的排序。所以只要 a r r arr arr和 t a r g e t target target内元素相同即可将 a r r arr arr变成 t a r g e t target target。
代码
代码1:
class Solution:
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
target.sort()
arr.sort()
return target==arr
代码2:
class Solution:
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
return Counter(target) == Counter(arr)
总结
- C o u n t e r ( ) Counter() Counter()是 c o l l e c t i o n s collections collections里面的一个类,作用是计算出字符串或者列表种不同元素出现的个数,返回值类型为 < c l a s s ′ c o l l e c t i o n s . C o u n t e r ′ > <class 'collections.Counter'> <class′collections.Counter′>,可以看作一个字典类型进行操作。
- l i s t 1 = = l i s t 2 list1==list2 list1==list2,列表进行等值比较,顺序和内容相同才会返回 T r u e True True。