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...