在这个问题中,我们得到了一个整数数组。在给定的数组中,每个元素都出现了两次,只有一个元素只出现了一次。我们需要找出只出现一次的那个数字。在这篇文章中,我们将学习如何在 Java 中找到只出现一次的数字,而其他所有数字都出现了两次。
场景1
除了数字 4 之外,其他所有数字都出现了两次,所以 4 是唯一出现一次的数字。
输入: [ 1, 2, 3, 3, 2, 4, 1, 5, 5]
输出: 4
场景2
除了10之外,所有其他数字都出现了两次,所以10是唯一只出现一次的数字。
输入: [ 7. 8. 9. 7. 10. 9. 11 ]
输出: 10
以下是在 Java 中找出 只出现一次的一个数字的不同方法:
一. 暴力破解法
在该方法中,我们使用嵌套循环来检查数组中的每个元素,并统计每个元素出现的次数。最终返回数组中仅出现一次的元素。
示例
import java.util.*;
public class FindUniqueNumber {
public static int findUnique(int[] arr) {
int n = arr.length;
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < n; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
if (count == 1) {
return arr[i];
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {4, 3, 4, 5, 3};
System.out.println("The number that appears once is: " + findUnique(arr));
}
}
上述程序的输出结果如下:
只出现一次的数字是:5
二. 利用异或(XOR)的高效解法
异或运算符具有以下特性:
a ^ a = 0:任何数字与自身进行异或运算时,会相互抵消,结果为 0.
a ^ 0 = a:任何数字与 0 进行异或运算时,结果仍为该数字本身。
异或运算遵循交换律和结合律,这意味着异或运算的执行顺序不影响最终结果。异或解法是一种效率更高的方法。在该方法中,我们对数组中的所有元素依次进行异或运算:所有出现两次的数字会相互抵消(结果为 0),最终剩下的结果就是只出现一次的数字。
示例
import java.util.*;
public class FindUniqueNumber {
public static int findUnique(int[] arr) {
int answer = 0;
for (int num : arr) {
answer = answer ^ num;
}
return answer;
}
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 3, 2, 4, 1, 5, 5};
System.out.println("The number that appears once is: " + findUnique(arr1));
}
}
上述程序的输出结果如下:
只出现一次的数字是:4
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容