2012 人民搜尋 實習生招聘 筆試題

2021-09-10 17:45:58 字數 3523 閱讀 9902

1、列印漢諾塔移動步驟,並且計算複雜度。

方法是遞迴,將n-1層移到中間柱,然後將最底層移到目標柱,然後再把n-1層移到目標柱。

f(n) = 2f(n-1) + 1 , f(1) = 1

f(n) + 1 = 2( f(n-1) + 1 )

f(n) = 2^n - 1

t(n) = o(2^n);

2、計算兩個字串的是否相似(字元的種類,和出現次數相同)

先比較strlen,如果不相等,直接返回false

根據ascii碼建表 str[255],然後比較字元的出現次數,如有乙個不同,返回false。

然後比較位置吧。有乙個不同,就返回true。

3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區間的節點的個數。

任意一種方式遍歷二叉樹,如果值在 [a,b] 之間,計數器+1

4、一條路有k可坑,每次能跳平方數步長(1 4 9 16。。),不能跳到坑里,從a跳到b最少幾步?(動態規劃題)

動態轉移方程

f(n) = min( f(大於n的第乙個平方數 -n) ,f(n- 小於n的第乙個完全平方數) +1 )

【 補充 ing

在乙個座標軸上, 給定兩個點,乙個起點,乙個終點,起點有乙個方塊,方塊可以左右移動,但是移動的長度只能是平方數長(1,4,9,16 ••••) ,同時座標軸上還有洞,移動的過程中不能越過這個洞,不然會掉下去,問 由起點到終點 至少需要多少次移動,不能到達返回-1】

5、給乙個整數陣列,求陣列中重複出現次數大於陣列總個數一半的數。

int

morethanhalfnum

(int *a , int n )

else

if(a[i] != num)    --times;   else    ++times;  }  k = 0;  for(i = 0 ; i < n ; ++i)    if(k*2

<= n)   return

-1;    //沒有找到

else

return num;   //找到}

swapoddevenbit

(int x)

intmain

(void)

8、試著用最小的比較次數去尋找陣列中的最大值和最小值。

解法一:

掃瞄一次陣列找出最大值;再掃瞄一次陣列找出最小值。

比較次數2n-2

解法二:

將陣列中相鄰的兩個數分在一組, 每次比較兩個相鄰的數,將較大值交換至這兩個數的左邊,較小值放於右邊。

對大者組掃瞄一次找出最大值,對小者組掃瞄一次找出最小值。

比較1.5n-2次,但需要改變陣列結構

解法三:

每次比較相鄰兩個數,較大者與max比較,較小者與min比較,找出最大值和最小值。

方法如下:先將一對元素互相進行比較,然後把最小值跟當前最小值進行比較,把最大值跟當前最大值進行比較。因此每兩個元素需要3次比較。如果n為奇數,那麼比較的次數是3*(n/2)次比較。如果n為偶數,那麼比較的次數是3n/2-2次比較。因此,不管是n是奇數還是偶數,比較的次數至多是3*(n/2),具體的**如下:

void

getmaxandmin

(int *arr , int n , int &max , int &min)

else   else    i += 2; }  for( ; i < n ; i += 2)   else   }}

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

1、列印漢諾塔移動步驟,並且計算複雜度。

方法是遞迴,將n-1層移到中間柱,然後將最底層移到目標柱,然後再把n-1層移到目標柱。

f(n) = 2f(n-1) + 1 , f(1) = 1

f(n) + 1 = 2( f(n-1) + 1 )

f(n) = 2^n - 1

t(n) = o(2^n);

2、計算兩個字串的是否相似(字元的種類,和出現次數相同)

先比較strlen,如果不相等,直接返回false

根據ascii碼建表 str[255],然後比較字元的出現次數,如有乙個不同,返回false。

然後比較位置吧。有乙個不同,就返回true。

3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區間的節點的個數。

任意一種方式遍歷二叉樹,如果值在 [a,b] 之間,計數器+1

4、一條路有k可坑,每次能跳平方數步長(1 4 9 16。。),不能跳到坑里,從a跳到b最少幾步?(動態規劃題)

動態轉移方程

f(n) = min( f(大於n的第乙個平方數 -n) ,f(n- 小於n的第乙個完全平方數) +1 )

【 補充 ing

在乙個座標軸上, 給定兩個點,乙個起點,乙個終點,起點有乙個方塊,方塊可以左右移動,但是移動的長度只能是平方數長(1,4,9,16 ••••) ,同時座標軸上還有洞,移動的過程中不能越過這個洞,不然會掉下去,問 由起點到終點 至少需要多少次移動,不能到達返回-1】

5、給乙個整數陣列,求陣列中重複出現次數大於陣列總個數一半的數。

int

morethanhalfnum

(int *a , int n )

else

if(a[i] != num)    --times;   else    ++times;  }  k = 0;  for(i = 0 ; i < n ; ++i)    if(k*2

<= n)   return

-1;    //沒有找到

else

return num;   //找到}

swapoddevenbit

(int x)

intmain

(void)

8、試著用最小的比較次數去尋找陣列中的最大值和最小值。

解法一:

掃瞄一次陣列找出最大值;再掃瞄一次陣列找出最小值。

比較次數2n-2

解法二:

將陣列中相鄰的兩個數分在一組, 每次比較兩個相鄰的數,將較大值交換至這兩個數的左邊,較小值放於右邊。

對大者組掃瞄一次找出最大值,對小者組掃瞄一次找出最小值。

比較1.5n-2次,但需要改變陣列結構

解法三:

每次比較相鄰兩個數,較大者與max比較,較小者與min比較,找出最大值和最小值。

方法如下:先將一對元素互相進行比較,然後把最小值跟當前最小值進行比較,把最大值跟當前最大值進行比較。因此每兩個元素需要3次比較。如果n為奇數,那麼比較的次數是3*(n/2)次比較。如果n為偶數,那麼比較的次數是3n/2-2次比較。因此,不管是n是奇數還是偶數,比較的次數至多是3*(n/2),具體的**如下:

void

getmaxandmin

(int *arr , int n , int &max , int &min)

else   else    i += 2; }  for( ; i < n ; i += 2)   else   }}

2012 人民搜尋 實習生招聘 筆試題

1 列印漢諾塔移動步驟,並且計算複雜度。方法是遞迴,將n 1層移到中間柱,然後將最底層移到目標柱,然後再把n 1層移到目標柱。f n 2f n 1 1 f 1 1 f n 1 2 f n 1 1 f n 2 n 1 t n o 2 n 2 計算兩個字串的是否相似 字元的種類,和出現次數相同 先比較s...

2012 人民搜尋 實習生招聘 筆試題

1 列印漢諾塔移動步驟,並且計算複雜度。方法是遞迴,將n 1層移到中間柱,然後將最底層移到目標柱,然後再把n 1層移到目標柱。f n 2f n 1 1 f 1 1 f n 1 2 f n 1 1 f n 2 n 1 t n o 2 n 2 計算兩個字串的是否相似 字元的種類,和出現次數相同 3 定義...

2012 人民搜尋 實習生招聘 筆試題

1 列印漢諾塔移動步驟,並且計算複雜度。方法是遞迴,將n 1層移到中間柱,然後將最底層移到目標柱,然後再把n 1層移到目標柱。f n 2f n 1 1 f 1 1 f n 1 2 f n 1 1 f n 2 n 1 t n o 2 n 2 計算兩個字串的是否相似 字元的種類,和出現次數相同 先比較s...