数组中只出现一次的数字(Java实现)

来源:互联网 发布:pyqt5 tabwidget数据 编辑:程序博客网 时间:2024/05/19 20:42

本题为剑指offer面试题40

牛客网测试地址:https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811

  • 时间限制:1秒空间限制:32768K
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
package go.jacob.day514;/*  * 本题为:剑指offer面试题40 *  * num1,num2分别为长度为1的数组。传出参数 * 将num1[0],num2[0]设置为返回结果 */public class Demo1 {public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {// 鲁棒性if (array == null || array.length < 2)return;int resultExclusiveOR = 0;// 对数组所有数进行异或for (int i = 0; i < array.length; i++)resultExclusiveOR ^= array[i];int indexOf1 = FindFirstBitIs1(resultExclusiveOR);for (int i = 0; i < array.length; i++) {if (isBit1(array[i], indexOf1))num1[0] ^= array[i];elsenum2[0] ^= array[i];}}/* * 在num的二进制表示中找到第一个位1的位的位置 */private int FindFirstBitIs1(int num) {int indexBit = 0;// int占4字节,一共32位while ((num & 1) == 0 && indexBit < 8 * 4) {num = num >> 1;indexBit++;}return indexBit;}// 判断num的indexOf1位上是否为1private boolean isBit1(int num, int indexOf1) {if (((num >> indexOf1) & 1) == 1)return true;return false;}}



0 0
原创粉丝点击