有乙個整數陣列,請編寫乙個函式,找出索引m和n,只要將m和n之間的元素排好序,整個陣列就是有序的。注意:n-m應該越小越好,也就是說,找出符合條件的最短序列。測試樣例:給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的起點和終點。(原序列位置從0開始標號,若原序列有序,返回[0,0])。保證a中元素均為正整數。
[1,4,6,5,9,10],6返回:
[2,3]
用b複製a,對b進行排序,然後比較a和b的每一位,得出符合條件的最短序列
class
rearrange
if(left < right)
return res;}}
;
有乙個非負整數,請編寫乙個演算法,列印該整數的英文描述。測試樣例: 返回:給定乙個int x,請返回乙個string,為該整數的英文描述。
「one thousand,two hundred thirty four」
const vector belowten
;const vector belowtwenty
;const vector belowhundred
;class
tostring
string transform
(int x)
};
對於乙個有正有負的整數陣列,請找出總和最大的連續數列。測試樣例:給定乙個int陣列a和陣列大小n,請返回最大的連續數列的和。保證n的大小小於等於3000。
[1,2,3,-6,1]返回:
class
maxsum
else
}int max =-1
;for
(int i =
0; i < n;
++i)
return max;}}
;
減小了空間複雜度
class
maxsum
return max;}}
;
請設計乙個高效的方法,找出任意指定單詞在一篇文章中的出現頻數。給定乙個string陣列article和陣列大小n及乙個待統計單詞word,請返回該單詞在文章中的出現頻數。保證文章的詞數小於等於1000。
解析一:雜湊,不知道為什麼編譯不通過
class
frequency
return hashtable[word];}
};
解析二:直接統計
class
frequency
return res;}}
;
請設計乙個高效演算法,找出陣列中兩數之和為指定值的所有整數對。測試樣例:給定乙個int陣列a和陣列大小n以及需查詢的和sum,請返回和為sum的整數對的個數。保證陣列大小小於等於3000。
[1,2,3,4,5],5,6返回:
class
findpair
if(sum < a[i]
+ a[j]
)break;}
}return count;}}
;
有乙個類似結點的資料結構treenode,包含了val屬性和指向其它結點的指標。其可以用來表示二叉查詢樹(其中left指標表示左兒子,right指標表示右兒子)。請編寫乙個方法,將二叉查詢樹轉換為乙個鍊錶,其中二叉查詢樹的資料結構用treenode實現,鍊錶的資料結構用listnode實現。給定二叉查詢樹的根結點指標root,請返回轉換成的鍊錶的頭指標。
struct treenode };
struct listnode };
class
converter
listnode*
treetolist
(treenode* root)
return phead;}}
;
請編寫乙個函式,將兩個數字相加。不得使用+或其他算數運算子。測試樣例:給定兩個int a和b。請返回a+b的值
1,2返回:
class
unusualadd
return b;}}
;
請編寫乙個方法,輸出0到n(包括n)中數字2出現了幾次。測試樣例: 返回:給定乙個正整數n,請返回0到n的數字中2出現了幾次。
class
count2
else
if(n %
10==2)
else
res +
=(n %10)
*(int)
pow(
10, count)
;++count;
n = t;
}return sum;}}
;
現在我們有乙個int陣列,請你找出陣列中每個元素的下乙個比它大的元素。測試樣例:給定乙個int陣列a及陣列的大小n,請返回乙個int陣列,代表每個元素比他大的下乙個元素,若不存在則為-1。保證陣列中元素均為正整數。
[11,13,10,5,12,21,3],7返回:
[13,21,12,12,21,-1,-1]
class
nextelement
res[i]
= j < n ? a[j]:-
1;}return res;}}
;
現在有乙個陣列,請找出陣列中每個元素的後面比它大的最小的元素,若不存在則為-1。測試樣例:給定乙個int陣列a及陣列的大小n,請返回每個元素所求的值組成的陣列。保證a中元素為正整數,且n小於等於1000。
[11,13,10,5,12,21,3],7[12,21,12,12,21,-1,-1]
class
nextelement
res[i]
= min !=
0x3f3f3f3f
? min :-1
;}return res;}}
;
程式設計師面試金典84題之每日7題 第一天
請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個string inistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 aeiou ...
程式設計師面試金典 8 4
power set 編寫 列舉乙個集合的所有子集。根據公式,乙個集合一共有2 n個子集,在結果中,每個元素會出現2 n 1 次,所以總共需要對元素訪問n 2 n 1 次。為了生成n個元素的冪集,可以首先生成n 1個元素的冪集,然後將第n個元素加入到n 1個元素的冪集中的每個元素中,這樣就生成了包含第...
程式設計師面試金典
1.有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階 3階。請實現乙個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果mod 1000000007 給定乙個正整數intn,請返回乙個數,代表上樓的方式數。保證n小於等於100000。int countways int n retu...