題:假設你有乙個用1001個整數組成的陣列,這些整數是任意排列的,但是你知道所有的整數都在1到1000(包括1000)之間。此外,除乙個數字出現兩次外,其他所有數字只出現一次。假設你只能對這個陣列做一次處理,用一種演算法找出重複的那個數字。如果你在運算中使用了輔助的儲存方式,那麼你能找到不用這種方式的演算法嗎?
演算法描述如下:
int findsamenumber(const int a)
return s1-s2; }
演算法分析如下:
在1001個數種只有兩個相同的數字,那麼我們求出從1到1000的和,然後再求出a[0]到a[1000]的和,兩者大減小既可以得到陣列中那個唯一出現兩次的數
寫到這裡的時候忽然想到之前找工作時的一道面試題:不用for 、whiile、 if 等語句求1 2 3 ……100的累加和,同樣是用到公式s=n*(n+1)/2
有時候計算機和數學相互滲透,以至於我們都分不清哪是計算機方面的知識,哪是數學方面的知識。
我們也沒必要分清!
以上問題雖然簡單,但從簡單的問題中我們也可以得出分析問題的方法,窺一豹而知全斑!
微軟面試題 (找陣列中唯一出現兩次的數)
題 假設你有乙個用1001個整數組成的陣列,這些整數是任意排列的,但是你知道所有的整數都在1到1000 包括1000 之間。此外,除乙個數字出現兩次外,其他所有數字只出現一次。假設你 只能對這個陣列做一次處理,用一種演算法找出重複的那個數字。如果你在運算中使用了輔助的儲存方式,那麼你能找到不用這種方...
微軟面試題day 7(找陣列中唯一出現兩次的數)
題 假設你有乙個用1001個整數組成的陣列,這些整數是任意排列的,但是你知道所有的整數都在1到1000 包括1000 之間。此外,除乙個數字出現兩次外,其他所有數字只出現一次。假設你 只能對這個陣列做一次處理,用一種演算法找出重複的那個數字。如果你在運算中使用了輔助的儲存方式,那麼你能找到不用這種方...
唯一出現兩次的數字
今天mayuyu遇到了一道很難的數學題,人家本來就不擅長數學嘛!在的幫助下,mayuyu順利解決了它。mayuyu的問題是這樣的 給定乙個長度為100000的整數陣列,沒有排過序,所有整數的範圍均在int內,除了其中乙個數字出現過2次 以 外,其餘 的數字都出現過3次,現在要mayuyu找出唯一出現...