剑指offer 数组中只出现一次的数字
生活随笔
收集整理的這篇文章主要介紹了
剑指offer 数组中只出现一次的数字
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。
思路: 采用異或,能找出一個數組中一個只出現一次的數字,題目中要求是兩個??梢愿鶕@種想法,把數組一分為二,左邊的子數組異或得到一個數,右邊的子數組 異或得到一個數,左右子樹組的劃分,首先把數組異或得到兩個不同數的異或結果,找到他們最右邊的1出現的位置,根據對應為為1,來劃分數組。
public class Solution { public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {if (array == null || array.length < 2)return;int bitResult = 0;for (int i = 0; i < array.length; i++)bitResult ^= array[i];int index = findFirstBitIs1(bitResult);for (int i = 0; i < array.length; i++)if (isBit1(array[i], index))num1[0] ^= array[i];elsenum2[0] ^= array[i];}// 判斷target的右側index位是否為1private boolean isBit1(int target, int index) {return ((target >> index) & 1) == 1;}// 查找num右側第一個1的下標private int findFirstBitIs1(int num) {int indexBit = 0;// 注意判斷位數合法性while ((num & 1) == 0 && indexBit < 32) {indexBit++;num >>= 1;}return indexBit;} }總結
以上是生活随笔為你收集整理的剑指offer 数组中只出现一次的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn中常用的数据预处理方法
- 下一篇: qtreewidget 获取根节点_详解