通过翻转子数组使两个数组相等

通过翻转子数组使两个数组相等

一、题目描述

给定两个相同的非空整数数组,将其中一个数组翻转任意次可以得到两个相同的数组,则返回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]);
        
        
    }
posted @ 2022-08-25 22:42  z_coding  阅读(71)  评论(0)    收藏  举报