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

2021-10-23 06:27:12 字數 3870 閱讀 4890

請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。

給定乙個string inistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。

測試樣例:

「aeiou」

返回:true

「barackobama」

返回:false

class

different

return

true;}

};

請實現乙個演算法,在不使用額外資料結構和儲存空間的情況下,翻轉乙個給定的字串(可以使用單個過程變數)。

給定乙個string inistring,請返回乙個string,為翻轉後的字串。保證字串的長度小於等於5000。

測試樣例:

「this is nowcoder」

返回:「redocwon si siht」

class

reverse

return inistring;}}

;

給定兩個字串,請編寫程式,確定其中乙個字串的字元重新排列後,能否變成另乙個字串。這裡規定大小寫為不同字元,且考慮字串中的空格。

給定乙個string stringa和乙個string

stringb,請返回乙個bool,代表兩串是否重新排列後可相同。保證兩串的長度都小於等於5000。

測試樣例:

「this is nowcoder」,「is this nowcoder」

返回:true

「here you are」,「are you here」

返回:false

class

same

return

true;}

};

請編寫乙個方法,將字串中的空格全部替換為「%20」。假定該字串有足夠的空間存放新增的字元,並且知道字串的真實長度(小於等於1000),同時保證字串由大小寫的英文本母組成。

給定乙個string inistring 為原始的串,以及串的長度 int len, 返回替換後的string。

測試樣例:

"mr john smith」,13

返回:「mr%20john%20smith」

」hello world」,12

返回:」hello%20world」

1、不使用額外的空間

注意: resize()和reserve()在使用上的區別

class

replacement

int t = inistring.

size()

;// inistring.reserve(t + 2 * count);

inistring.

resize

(t +

2* count)

;for

(int i = t -

1, j = t +

2* count -

1; i >=

0&& j >=0;

--i,

--j)

else

}return inistring;}}

;

2、可以使用額外的記憶體空間

class

replacement

else

}return str;}}

;

利用字元重複出現的次數,編寫乙個方法,實現基本的字串壓縮功能。比如,字串「aabcccccaaa」經壓縮會變成「a2b1c5a3」。若壓縮後的字串沒有變短,則返回原先的字串。

給定乙個string

inistring為待壓縮的串(長度小於等於10000),保證串內字元均由大小寫英文本母組成,返回乙個string,為所求的壓縮後或未變化的串。

測試樣例

「aabcccccaaa」

返回:「a2b1c5a3」

「welcometonowcoderrrrr」

返回:「welcometonowcoderrrrr」

注意:char和int的相互轉換

class

zipper

else

} str +

=to_string

(count)

;return str.

size()

>= inistring.

size()

? inistring : str;}}

;

有一副由nxn矩陣表示的影象,這裡每個畫素用乙個int表示,請編寫乙個演算法,在不占用額外記憶體空間的情況下(即不使用快取矩陣),將影象順時針旋轉90度。

給定乙個nxn的矩陣,和矩陣的階數n,請返回旋轉後的nxn矩陣,保證n小於等於500,影象元素小於等於256。

測試樣例:

[[1,2,3],[4,5,6],[7,8,9]],3

返回:[[7,4,1],[8,5,2],[9,6,3]]

非常有趣的思路(沒看過想不到的):

首先上下翻轉,再按照主對角線翻轉

1 2 3 —> 7 8 9 —> 7 4 1

4 5 6 —> 4 5 6 —> 8 5 2

7 8 9 —> 1 2 3 —> 9 6 3

如果是逆時針翻轉則先翻主對角線,再上下翻轉

class

transform

for(

int i =

0; i < n; i++)}

return mat;}}

;

請編寫乙個演算法,若n階方陣中某個元素為0,則將其所在的行與列清零。

給定乙個n階方陣intmat和矩陣的階數n,請返回完成操作後的int方陣(c++中為vector>),保證n小於等於300,矩陣中的元素為int範圍內。

測試樣例:

[[1,2,3],[0,1,2],[0,0,1]]

返回:[[0,0,3],[0,0,0],[0,0,0]]

class

clearer

}while

(!que.

empty()

)for

(int k =

0; k < n;

++k)

}return mat;}}

;

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

有乙個整數陣列,請編寫乙個函式,找出索引m和n,只要將m和n之間的元素排好序,整個陣列就是有序的。注意 n m應該越小越好,也就是說,找出符合條件的最短序列。給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的起點和終點。原序列位置從0開始標號,若原序列有序,返回 0,0 保證a中元...

程式設計師面試金典 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...