数组中只出现一次的数字(Java)
程序员文章站
2022-07-15 10:47:02
...
题目:
一个整型数组里面除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字,要求时间复杂度是O(n),空间复杂度是O(1)。
思路:
利用异或去重的思想
代码实现:
public class Main {
public static void findNumsAppearOne(int nums[]){
int len = nums.length;
if(len < 2){
return ;
}
int AllXOR = 0;
for(int i = 0; i < nums.length; i++){
AllXOR ^= nums[i];
}
//找到AllXOR中第一位为1的位置
int res = findFirstBit1(AllXOR);
int num1 = 0, num2 = 0;
for(int i = 0; i < nums.length; i++){
if(isBit1(nums[i], res)){//根据一特定位置是否为1,将数组分为两个子数组进行判断,每一个子数组中包含一个只出现一次的数字
num1 ^= nums[i];
}else{
num2 ^= nums[i];
}
}
System.out.println(num1 + " " + num2);
}
//num&(-num)是把最右边的1保留下来
private static int findFirstBit1(int num) {
return num&(-num);
}
//判断某一特定位置是不是1
public static boolean isBit1(int data, int res){
return ((data & res) == 0) ? false : true;
}
}
上一篇: BootstrapTable刷新后/重新加载后跳到原页码的界面
下一篇: Vue过滤器filter
推荐阅读
-
PHP查找数组中只出现一次的数字实现方法【查找特定元素】
-
在字符串中找出第一个只出现一次的字符。经典C语言例题
-
leadcode的Hot100系列--136. 只出现一次的数字
-
python(leetcode)-136只出现一次的数字
-
LeetCode 面试题56 - I. 数组中数字出现的次数
-
Java 数组练习题:随机生成10个整数,并添加到一个数组中,数组不允许添加重复的数字【多测师_何sir】
-
在一个非降序排列的数组中,找出数字target出现的次数问题解答
-
剑指offer 56 数组中数字出现的次数 lintcode 82. 落单的数、83. 落单的数 II、84. 落单的数 III
-
位运算 -- 只出现一次的的数字
-
【知识迁移能力】数组中只出现一次的数字