腾讯(求丢失的元素)
生活随笔
收集整理的這篇文章主要介紹了
腾讯(求丢失的元素)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.從1~100中隨機抽走一個數字,剩下的99個數字被打亂順序放到數組 a[99]。int a,k=0;
srand(time(NULL));
a = rand()%100+1;//隨機從0~100抽取一個數
int array[99] = {0};//數組保存數據
for(int i = 1; i <= 100; ++i)
{if(i != a)array[k++] = i;//獲取剩下的99個數字
}//打亂剩下99個數據
for(int i = 0; i <99; ++i)
{int j = rand()%99;//隨機獲取一個數組下標//將i下標處的數據與j下標數據交換int b = array[i]; array[i] = array[j];array[j] = b;
}二.有一組數字,從1到n,從中減少了3個數,順序也被打亂,放在一個n
求丟失的元素.這原是一道JSP面試題 1.二分查找 2.遍歷數組,求取數組的累加和s, 平方和qs。
用1...10000的累加和減去s, 得到移除兩數之和a,
用1...10000的平方和減去qs,得到移除兩數之和b,那么解方程就可以了
x1 + x2 = a
x1^2 + x2^2 = b需要用的高中數學中的角坐標變換,和差化積什么的。至于去掉三個數大家可以試試立方和
x1 + x2 + x3 = a
x1^2 + x2^2 + x3 = b
x1^3 + x2^3 + x3^3 = c
方程大家可以任意構造,只要其和不用太大,并且易于求解就可以了設減少的3個數分別為x、y、z,3個數的和為b,3個數的平方和為c,3個數的立方和為d。
據題意有下面3個等式聯立:
x + y + z = b ①
x * x + y * y + z * z = c ②
x * x * x + y * y * y + z * z * z = d ③
只要求出了b、c、d,我們就可以把①式兩邊平方再減去②式得到——
x * y + y * z + x * z = f(a, b, c) ④
再通過(x + y + z)^3 = x^3 + y^3 + z^3 + ... + 6x * y * z的公式和①②③式代入處理③式得到——
x * y * z = f(a, b, c) ⑤
根據①④⑤就能轉換成一元三次方程,通過盛金公式(B^2-4AC<0)求取3個根——也就是被減少的那3個數。3.
bitmap,hash方法暫時不會 4.
memset(flag,0,sizeof(flag));
for(int i=1;i<=n-3;++i)
flag[a[i]]=1;
for(int i=1;i<=n;++i)
if(!flag[i])
cout<<i;
?
轉載于:https://www.cnblogs.com/hxsyl/archive/2012/07/01/2572235.html
總結
以上是生活随笔為你收集整理的腾讯(求丢失的元素)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2012_Houdini_ShowRee
- 下一篇: display:inline-block