通过翻转子数组使两个数组相等
一、题目描述
给定两个相同的非空整数数组,将其中一个数组翻转任意次可以得到两个相同的数组,则返回true否则返回false。
实例1
输入:targer = [1,2,3,4]; arr = [2,3,1,4];
输出:true
实例2
输入:targer = [1,2,3,4]; arr = [2,3,1,11];
输出:false
二、题目分许
首先是两个数组长度相等,不许要考虑长度问题。分析问题发现,只需要判断两个数组中的元素是否相等即可。
三、解题思路
方法1
可以通过对两个数组进行排序。排序后再对两个数组进行比较即可。
代码实现:
class Solution {
public boolean canBeEqual(int[] target, int[] arr) {
Arrays.sort(target);
Arrays.sort(arr);
return Arrays.equals(target,arr);
}
}
方法2
可以通过计算每个数组中各个元素出现的频率。再对比后,查看数组是否相等。
1、创建一个固定长度的数组。
2、循环遍历两个数组。其中先将一个数组中没个元素的值作为新创建数组的索引,并将该索引上的值加一,将另一个数组上的遍历,数组中每一个元素作为新数组索引,并将该数组的值减一
3、如果两数组中的值相同,则新数组中的每一个元素都是0;若不为零,则返回false。
代码实现
public boolean canBeEqual(int[] target, int[] arr) {
int[] list = new int[1001];
for(int i = 0; i<arr.length ;i++){
list[target[i]]++;
list[arr[i]]--;
}
return Arrays.equals(list,new int[1001]);
}
标签:arr,相等,两个,target,int,数组,翻转
From: https://www.cnblogs.com/zjjtt/p/16626034.html