第一個問題是給出2n+1個數,其中有n個數是成對出現的,讓我找出裡面只出現了一次的那個數。
題目:
- 給你n個數,其中有且僅有一個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那一個數。
- 給你n個數,其中有且僅有兩個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那兩個數。
答案:
從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。這是因為異或有一個神奇的性質:兩次異或同一個數,結果不變。再考慮到異或運算滿足交換律,先異或和後異或都是一樣的,因此這個演算法顯然正確。
從頭到尾異或一遍,你就得到了需要求的兩個數異或後的值。這兩個數顯然不相等,異或出來的結果不為0。我們可以據此找出兩個數的二進位制表達中不同的一位,然後把所有這n個數分成兩類,在那一位上是0的分成一類,在那一位上是1的分到另一類。對每一類分別使用前一個問題的演算法。
確實是很牛的演算法,特別是第二個
相關推薦
第一個問題是給出2n+1個數,其中有n個數是成對出現的,讓我找出裡面只出現了一次的那個數。
題目:給你n個數,其中有且僅有一個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那一個數。給你n個數,其中有且僅有兩個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那兩個數。答案:從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。這是因為異或
碼客幫&新媒體大學:你和月入百萬的微信公眾號之間,只差了一次思維升級!
2011年微博火了,當時大家只把它當成娛樂工具;於是,最早利用微博流量做品牌做銷售的人賺得合不攏嘴。 比如「野獸派花店」,一個沒有實體店沒有淘寶店的賬號,開通微博不到一年已經吸引了超過18萬粉絲,藉助花卉禮盒的美圖和140字的文字介紹,幾年來轉化了大量忠實使用者,連林心如霍建華婚禮都指定他們的產品
經典演算法-給出2n+1個數,其中有2n個數出現過兩次,用簡便的最方法求出現一次的數
給出2n+1個數,其中有2n個數出現過兩次,用簡便的最方法求出現一次的數 思路分析: 列如給定一個數組 array1 [5,2,4,3,5,2,4,10,3] 想要通過最簡單的方式那就是異或了
12個球,其中有1個壞球和其他11個重量不一樣,給你一個天平,稱3次,找出不一樣的那個
很常見的一道邏輯題,只使用已知條件,不借用其他外力。 設12個球分別是:A1,A2,A3,A4,B1,B2,B3,B4,C1,C2,C3,C4 第一次稱:天平兩側分別是,左側:A1,A2,A3,A4,右側:B1,B2,B3,B4 若平衡,則壞球在C組中。 第二次稱C1,
有2n+1個數,其中有2n個數出現過兩次,找出其中只出現一次的數
給出2n+1個數,其中有2n個數出現過兩次,如何用最簡便的方法找出裡面只出現了一次的那個數。 例如這樣一組數3,3,1,2,4,2,5,5,4,其中只有1出現了1次,其他都是出現了2次,如何找出其中的1? 最簡便的方法是使用異或,程式碼如下: public class XO
寫一個函式返回引數二進位制中1的個數+獲取一個數二進位制序列中所有的偶數位和奇數位,分別輸出二進位制序列+輸出一個整數的每一位+兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同
寫一個函式返回引數二進位制中 1 的個數 比如: 15 0000 1111 4 個 1 #include <stdio.h> #include <windows.h> /* 寫一個函式統計一個數二進位制形式下 1 的個數 */ //統計 1 的個數 int C
網易面試題之 牛牛的作業薄上有一個長度為 n 的排列 A,這個排列包含了從1到n的n個數,但是因為一些原因, * 其中有一些位置(不超過 10 個)看不清了,但是牛牛記得這個數列順序對的數量是 k,
package wangyi; /** * Created by Administrator on 2016/12/7. * 牛牛的作業薄上有一個長度為 n 的排列 A,這個排列包含了從1到n的n個數,但是因為一些原因, * 其中有一些位置(不超過 10 個)看不清
編寫10個執行緒,第一個執行緒從1加到10...
11、編寫10個執行緒,第一個執行緒從1加到10,第二個執行緒從11加到20...第十個執行緒從91加到100,最後再把十個執行緒結果相加。public class Accumulator exten
【轉載】隨機生成k個範圍為1-n的隨機數,其中有多少個不同的隨機數?
n) 不重復 nlog 並且 線性 一個 劃分 次數 com 來源:http://www.cnblogs.com/haolujun/archive/2012/11/11/2765102.html 假如現在讓你隨機生成k個範圍在1-n內的隨機數,那麽你能得到多少個不同
Django初步實現第一個項目(1)
127.0.0.1 mil img span 9.png settings info ima div 1.安裝Django最新版 pip install django==2.1.1 2.查看Django版本 3.創建第一個Django項目 4.創建一個app模塊
《windows程序設計》第一個窗口(1)
ati col clas where app byte bytes pixel over #if defined(UNICODE) && !defined(_UNICODE) #define _UNICODE #elif defined(_UNIC
請實現一個函式用來找出字元流中第一個只出現一次的字元。
題目描述 請實現一個函式用來找出字元流中第一個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第一個只出現一次的字元是"g"。當從該字元流中讀出前六個字元“google"時,第一個只出現一次的字元是"l"。 輸出描述: 如果當前字元流沒有存在出現一次的字元,返回#字元。
springboot第一個專案hello word (1)
我用的是idea版的 新建一個專案,我就不具體說了。主要說重要的。 開啟pom.xml 配置依賴 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4
2.題目:有n個人圍成一圈,順序排號,從第一個開始報數(從1到3報數),凡報到3的人退出圈子,問最後最後留下的是原來第幾號的那位. 提示:用陣列完成
#include <stdio.h> int main() { int n; printf(“輸入人數:\n”); scanf("%d",&n); int a[1000]; int i,temp; int count = 0; temp =
面試- 阿里-. 大資料題目- 給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,讓你找出a、b檔案共同的url?
假如每個url大小為10bytes,那麼可以估計每個檔案的大小為50G×64=320G,遠遠大於記憶體限制的4G,所以不可能將其完全載入到記憶體中處理,可以採用分治的思想來解決。 Step1:遍歷檔案a,對每個url求取hash(url)%1000,然後根據所取得的
有m個數組成的陣列,其中有一個數佔一半以上,找出這個數
解法一:用快速排序,處於中間的數就是要找的那個數。時間複雜度為O(nlogn) 快排的python實現可以點選這 解法二:統計每個元素出現的次數,返回出現次數最大的元素。不同元素個數為M,則時間複雜度為O(M*n) aa = [1,1,1,1,0,0,0,0,0]
1.程式設計實現: 兩個int(32位)整數m和n的二進位制表達中, 有多少個位(bit)不同? 輸入例子: 1999 2299 輸出例子:7
方法一: 演算法思想:由於要找兩個數對應不同位元位的個數,可以先將兩個數按位異或,然後再統計異或後的數中的一的個數,而統計二進位制中1的個數有三種方法;1.這個數迴圈按位 於比它小1的數,直到這個數為0為止;2.把這個數的每一個二進位制位拿出來,用的方法是和1相與,移位,迴
找出陣列中出現一次兩個數,其他數字都出現偶數次
{ unsigned int flag =1; while(flag) //求異或結果,最低的為1的二進位制位,根據此位是否為1,將元素分為兩組,兩個不同的元素,在此位必然,一個為1,一個為0 { if(flag&sum) break;
噹噹筆試題(有n個人成一圈,順序排號(編號為1到n),從第一個人開始報數1到3報數),凡報到3的人出圈子,從下個人開始繼續報數,直到最後一個人,問最後留下在是第幾號?)
-舉例 12345678 第一次3走,第二次6走,第三次1走 import java.util.ArrayList; import java.util.Scanner; public
有n個人圍成一圈,順序排號,從第一個開始報數(從1到m報數),凡報到m的人退出圈子,問最後最後留下的是原來第幾號的那位
//題目:有n個人圍成一圈,順序排號,從第一個開始報數(從1到3報數),凡報到3的人退出圈子,問最後最後留下的是原來第幾號的那位. //提示:用陣列完成 #include <stdio.h> #define N 100 int fun (int n, int m