陣列中只出現一次的數
1、一個整型數組裡只有一個數字出現了一次,其餘數字都出現了兩次,請寫程式找出出現了一次的數字。
思路:XOR位運算,相同數字XOR為0,任何數字與零XOR為自己。此題陣列一遍XOR就能找到出現一次的數
public int arrayXOR(int[] arr) {
int temp = 0;
for (int i = 0; i < arr.length; i++) {
temp ^= arr[i];
}
return temp;
}
2、一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次,請寫程式找出這兩個只出現一次的數字。如:{1,2,1,2,3,4},找出3和4。
第一步,將陣列中所有數字異或一遍,得到的結果為兩個只出現一次的數字的異或結果。
本題:
0011(3)^(0100)4 = 0111(7) 括號內為十進位制
第二步,在第一步得到的數字的二進位制中找出第一個為1的位,通過這個位為0或為1,將陣列中的數字分為兩組。這兩個組裡出現一次的兩個數必定不在同一組,兩個相同的數字必定會被分在一個組。
本題:
0111最低位就為1,將陣列中最低位為1的放在一組,為0的放在另一組,則3和4必定不在同一組,因為找出的這 個位為1,即3和4 的這一位不同。則一組為:1,1,3 二組:2,2,4
第三步,將兩個組中的所有數字分別異或,就會得到每個組中只出現一次的那個數。(思路同第一題)
本題:
1^1^3 = 3,2^2^4 = 4,所以就找到了只出現了一次的兩個數。
public void getTwoNum(int[] arr, int a) {
// 第一次XOR
int a = arrayXOR(arr);
// 找出分組位“1”
int k = 0;
while ((a & 1) != 1) {
a >>= 1;
k++;
}
// 分組執行第一題的思路,即第二次XOR
int t1 = 0, t2 = 0;
int mod = 1 << k;
for (int i = 0; i < arr.length; i++) {
if ((arr[i] & mod) != 0) {
t1 ^= arr[i];
}
if ((arr[i] & mod) == 0) {
t2 ^= arr[i];
}
}
System.out.println(t1);
System.out.println(t2);
}
相關推薦
劍指offer之陣列中只出現一次的數字
1.題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 2.問題分析 方法一: 可以使用map,統計每個數出現的次數,之後對兩個出現一次的數進行賦值 方法二: 這裡就數字的特性,首先我們需要知
牛客網——陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 1實在沒想到什麼好的解決方法,就用TreeSet解決,因為底層是紅黑樹實現,增加,刪除結點是logn,所以複雜度為O(nlogn) package 劍指offer;
陣列中只出現一次的數字 java
陣列中只出現一次的數字 java 題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 程式碼1: //num1,num2分別為長度為1的陣列。傳出引數 //將num1[0],num2[0]設定為返回結果 i
劍指offer:(40)知識遷移 :陣列中只出現一次的數字
一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。 思路: 可以用位運算實現,如果將所有所有數字相異或,則最後的結果肯定是那兩個只出現一次的數字異或 的結果,所以根據異或的結果1所在的最低位,把數字分成兩半,每一半
劍指offer系列(十四)二叉樹的深度,平衡二叉樹,陣列中只出現一次的數字
二叉樹的深度 題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 解題思路: 利用遞迴實現。如果一棵樹只有一個結點,那麼它的深度為1。遞迴的時候無需判斷左右子樹是否存在,因為如果該節點 為葉節點,它的左右
劍指offer——(7)二進位制中1的個數&&陣列中只出現一次的兩個數字
位操作符簡單記憶: &(與):相同位同為1時結果為1 否則為0 |(或):相同位同為0時結果為0 否則為1 ^(異或):相同位相同結果為0 不同為1 ~(取反):0變成1 1變成0 m>>(右移)n:m的各二進位全部右移n位,低位丟
【Java】 劍指offer(56-2) 陣列中唯一隻出現一次的數字 《劍指Offer》Java實現合集 56-1) 陣列中只出現一次的兩個數字 《劍指Offer》Java實現合集
本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集 題目 在一個數組中除了一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。 思路 這道題中數字出現了三次,無法像56-1) 陣列
劍指offer 40. 陣列中只出現一次的數字
原題 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 Reference Answer 思路分析 直接利用python中的dict進行次數統計就好了,用空間換時間。 # -*- coding:utf-8 -*- class
劍指offer_陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 # -*- coding:utf-8 -*- class Solution: # 返回[a,b] 其中ab是出現一次的兩個數字 &n
《劍指offer》系列 陣列中只出現一次的數字(Java)
連結 牛客:陣列中只出現一次的數字 題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 思路 參考:陣列中只出現一次的數 我們從頭到位對陣列做異或運算,得到的最終結果應該是兩個不同數字做異或運算後的值。因為兩個數字
T38:陣列中只出現一次的數
1.https://blog.csdn.net/blubluhao/article/details/79846042 2.https://blog.csdn.net/blubluhao/article/details/79846042 import java.util.HashSet; im
劍指offer第四十題:陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 思路1:先排序,然後遍歷整個陣列,如果當前數和前邊的數以及後邊的數都不一樣,那麼當前數就是隻出現了一次的數字,注意考慮邊界(只出現一次的數可能在陣列第一個也可能出現在
劍指Offer-56 陣列中只出現一次的兩個數字
題目: 一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。你可以假設這兩個數字一定存在。 樣例 輸入:[1,2,3,3,4,4] 輸出:[1,2] 解答: class Solution(object): def findNumsAppe
面試題56-題目一:陣列中只出現一次的兩個數字
/* * 面試題56-題目一:陣列中只出現一次的兩個數字 * 題目:一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 * 思路:異或運算, * 我們想到了異或運算的性質:任何一個數字異或它自己都等於0。 *
劍指offer----陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 //所有數字異或,最後得到的是兩個只出現一次的數字異或的結果,從低位到高位 //找到第一異或為1的位,記下來,根據這個位,將原來的陣列分做兩部分,可解 cl
陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 解題思路: 利用LIst contains() 方法判斷原有list 陣列中是否存在相同的值 ,若存在則移除,最後list陣列剩下的即為兩個只出現一次的數字
【劍指offer】陣列中只出現一次的數字
remove:刪除特定元素第一次出現的時候,返回的是刪除後的陣列 del:刪除指定索引的元素 del a[2],返回的是刪除後的陣列 pop:刪除指定索引的元素,返回的是刪除的元素 有一個問題就是我不知道判斷not in list 的時候O(n)的複雜度會不會影響 執
劍指offer-陣列中只出現一次的數字(陣列)
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 這題想到用map,類似於“陣列中出現次數超過一半的陣列”https://blog.csdn.net/Mr_xuexi/article/details/84555464 其中,data
劍指offer-41:陣列中只出現一次的數字和為S的連續正數序列
題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你
劍指offer-40:陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。時間複雜度O(N),空間複雜度O(1)。 思路 這個題目的突破口在哪裡?題目為什麼要強調有一個數字出現一次,其他的出現兩次?我們想到了異或運算的性質:任何一個數字異或它自己都等