最近,在lintcode刷Java的基础题。其中一道判断两个数组是否相等的问题,我用我电脑上的idea编写通过,可是平台却运行结果报错,编译是通过的,我怀疑原因可能是由于平台使用的jdk版本比较低引起的。
问题概述
描述
给定两个无序整型数组 arr1 和 arr2 ,请判断这个数组中的元素是否相等(两个数组中的内容全等)。
请在类名为 Solution 的 equalityOfArrays 方法中 // write your code here 下面编写你的代码。
样例
评测机会将整个工程的代码编译为一个可执行的 Main 程序,并按照这样的方式执行你的代码。
样例一
当数组 arr1 的值为 [1,2,3],数组 arr2 的值为 [2,1,3] 时,输出结果为:
The arrays arr1 and arr2 are equal.
样例二
当数组 arr1 的值为 [1,2,4],数组 arr2 的值为 [2,2,3] 时,输出结果为:
The arrays arr1 and arr2 are not equal.
解题思路
特别是我发现通过键盘输入时,字符串类型可以通过tocharArray()函数直接转换为字符型数组。
我的思路:
- 首先在main函数中,通过键盘输入将数组用字符串接收并且直接利用tocharArray()函数转换成char类型的数组;
- 然后定义两个新的int类型数组,动态初始化数组长度为char类型数组的长度。并通过两个for循环直接把字符型数组强制类型转换为int类型,然后存入int类型的数组中;
- 最后,通过Array.sort()和Array.equals()函数排序并判断两个数组是否相等。
代码展示
import java.util.*;
public class Solution {
public boolean equalityOfArrays(int[] arr1, int arr2[]) {
// -- write your code here --
if(Arrays.equals(arr1,arr2)) {
return true;
}else return false;
}
public static void main(String[] args){
Solution s = new Solution();
Scanner sc = new Scanner(System.in);
// 通过Scanner传入两个字符串转char类型数组
char[] arr1 = sc.next().toCharArray();
char[] arr2 = sc.next().toCharArray();
// 定义两个新的int类型数组接收传入的两个char类型数组
int[] arrint1 = new int[arr1.length];
int[] arrint2 = new int[arr2.length];
for(int i=0;i
arrint1[i] = (int) arr1[i];
}
for(int i=0;i
arrint2[i] = (int) arr2[i];
}
Arrays.sort(arrint1);
Arrays.sort(arrint2);
if(s.equalityOfArrays(arrint1,arrint2) == true){
System.out.println("The arrays arr1 and arr2 are equals");
}else System.out.println("The arrays arr1 and arr2 are not equals");
}
}
总结
分析: 虽然在强制转换类型过程中,数组的值会发生变化。 所以前提要求是,题目要求仅仅只用来判断两个数组是否相等的情况。 我个人认为这个是可行的。



