程式設計師面試金典84題之每日7題 第十天

2021-10-05 11:08:29 字數 4227 閱讀 3721

有乙個整數陣列,請編寫乙個函式,找出索引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...