Professional Documents
Culture Documents
Programming Interviews-H Siadati-S Jafarikhah
Programming Interviews-H Siadati-S Jafarikhah
د د
ی اه د
4 ی .۱ا ل
4 .۱.۱ا اف
5 .۲.۱
6 .۳.۱
18 .۳
19 ن در ۱.۳
20 د و وش .۲.۴
24 ه را ۳.۴د
26 .۵ر
27 ن در ۱.۵ر
27 ن در ه ر ر
28 م ا ار را ی ۲.۵
31 ت را ۲.۵
34 ؟ ا ۳.۵آ
38 .۶
39 ن در ۱.۶
39 ن در ه ر
40 ؟ ۲.۶آ
44 در ار ر ۳.۶او
48 .۷
49 ۱.۷
49 ن در ه ر
50 ات د ۲.۷
99 .۱۳اف
100 ۱.۱۳اف
101 ت د ۲.۱۳
108 در ول ۳.۱۳
ی .۱ا ل
روی دن ورک ا و د ارد . ی ای ای در ا ان روش ز ن
، .در ا د ی وا د آ و دار ا وز ژی و
.روش آ ده ی ای و د ا ی را ای ن
و ن را در م ا اری ا ی ه ا ا م
ا .در ه ود ر را و در رزو د ر ا ار ی ب ا ا ٓ
ب را ار و و ل دن ی رت ی ا ام ا ه
،رت م ا ار در د ی ا رت آپ ی رگ د و ا . در
ا . ام ای ا را و یا رت
ص ، ه را ا ا د . ب ا ب و ا ل از د دادن ام ا روش ری ا
ر درو ا دن ری در . ان ل ،در ه را ن ا و ه
ای .رو ن ب از اد د ،ا
را درو ا رت ه دی رت ا ف در ز ن د ا
. رت ارز را د . ر
ل رت آن را و ا و ارا ای ا ر ا راه : رت ●
.
را ت ا اد و د را ای ا اد د ا راه ی : ار ط ا ●
. ده از آن ا و در
ند . د را ده زی ارا را ط راه ا : ●
ز دو د و د ده شوا ،و ای ا ، ا
دار . در
. دو ت ا از ر دن و و ا ژی : ●
.۲.۱
ی ب د ار . در از د ی ر ن ری از
آن ا ارد .ف ا ار د .ا وا ش در ا ر ه ا
. ی رگ د از د
ان ل دار . ام ای ا دور : اد ●
اد در ی دارد. ری ای ارز و۵ آ
. وت ا
در او آ د. ار در رت آ : نو ●
ی . داک( ) آ و ا را در ه دو ا م
د . دا م ه وا اق و در ری در
ت ه را ه راس . ل ی ● ز ن:
. و وی ش آ
ر روی آن و ت وژه ا ر ه د : ا ای ●
. در ره دش ه ا از . ری را در ۲ د
ای ش در آن و ت ارج ه در ۲ د
رت ت وی دا در رد ه ا ا . د را
د . ف و
ا ح و از ه ال : و ا ر ●
ارا ل از ورودی و و ا . آن را . ا ال ا
ز ا ت . ال را درک و داده ی ورودی و و را
د در رد راه ی ه آن ا دار . ی دن از
.وع ده زی ون ب راه را ا و آن را ارز ،ا ی و
ه ای . ا ادی دوری از و ن ری از ز ن ر
در و راه ی آن را ، ،از ن د از ا ش ا
و ح د .ا ت آ را د و
راه) ده . ا ر را ده از وا د راه ی د را ا
راه ی ن (brute force وع . ی
از راه ده در ض 20 د د . ا ر را ده ه ا
ه وع د ، ه راه را ر .در ر راه
، د .ن آن را روی وا د . او در
در ز ن . در ر داده ورودی د را ور و
را ) دا ه ا ت ا ( ) ود 20 د را
داده د . ا در (و رز د ر داده ی د
ه ا ه از ا :در 5 د ای ●
م روی .ا در ال ه ز ک . ا دارد
ام ا ی ا ؟ و از ر دن در ا وژه ای ر ا د؟ ا
؟
ا و و ف از :در ا ی و ●
ه ز و در در ن روز روز ا ه از ز .
. آن دارد و ا آ د د ال ا ای د ا از
.۳.۱
در اد ی ام ا ای ا م ا اری ا و دارا ب
ر ا . ا ،او را ارز ام را ارز ا ر . ر
.ا ا ارد ا ام ر ر ه ا ا . ای ه
د . ی ری از اوازه ش
د . ام دارد را ا و ا )(approchable ود دو
ت ر و و ای ر ن ،اد ر ن و وژه ، ت ر .در رد ق ،ا ف ،دق ،و دل
ت ،ا ا د .در د زود . ه دق
د . وارد ا را
.ا د ا را ده << ب .ان ل ال>> ا ر دا د ب ال در ا
ه ا در ارد و د دارد و (۲) ا ای ا ر ی وف ده زی ی ا ) (۱
ب ا ت در ال ا ا از . ،ا ب اب د ن د ه
. ب ا را ای ا ت ا leetcode.com در د.
م .ا ، ه ا .ا ه را
،ع ل ت ت ا د . را ای وی ،ه ا م د ت ای
و ز ن ی ) ود ( ،ل ی ) ،ه ا ار ا از وی
. را ا ا ت و ( و و ای ۴۰د
. ف آ د د و د ن را ری ه
ا ت .۲ا ا ی در
د ۱.۲ا ا ی
) ت در ی در ا ر ف و ا
راه د را ح ای اب آ ا و ز ت وت ا .در (ACM
ر ن ه ای ی در د .در
ر ه ن ا داد .(Think out Loud) ا ر ن را داد ح ا
دار ؟ ا ر ای ذ رو آ ا ا ه ).(thought process
ن راه ا را روی و ا ا ه ی از ز ن ر ا ذ
ت ی ا ا ا ا .ا ا ا ی در ا ز ن از را
ذ د را ا .ا د رت در ار ط و د دو و
ز ،و ی ی م و ن ر ، رت ری از ا ه ا در ل در
. ن را داد
ا .در ا روش د ده از ا ا ی راه ای ا د ری از ا ه ا
راه را م م و ( راه ) ا ا از ال ، ،
. ر وی از ال را د ه ا از زم ز ن آور .در ا و ا
ه ا ا .ا ر را ا م د از د زم د ا
د ل را در در ی د ا ا ی .دار ز ر
د . ن رت
یا ر ا ت ای د ا ا ی ا
: رت ا ت
ا ها . را در ند از ورودی و و :ا ا ●
ز ا ا ر .ا ه آن را ع ورودی و
. را ا
(brute force) ا آ ز . راه ی را از روش : ی ● راه
ی Big O ده از آن را ) ا و ان . ه را ای
را و ح د .ف از ا ر ا ا (۱) ا ر را ا ( ارز در
را در ز ن راه و (۲) در ر ا ی آن را در و ا م
ا راه) ا ه ن داده ا ا ( ۳۰ ۲۰ د )
ه ا ا زه د از را ا اب را دار . ( ای
ن د . ا ر را ده زی را ده زی راه
. ن د را ا ا ر داده ورودی :دادن ورودی ی د ● آز
ا ب ا و ا دن ا ر در رد ده زی :ا راه ا ازه ●
' ده زی' و .
ده ه ز د ا ا آن ا اد راه : در ر ا ر در ا ا ●
د آن رت ارا ده ا ل آن را ز ن ور .ا ا ر ا
ز دی ا ا ر ا . ر و ن داده ورودی ا ا ر
.وه ا ، ش ز ده . ن ا اد راه ا
را دی ر ا ا ا ر ی آن ا . ی ا ر
ا . ای ای ارا راه ا ادی . ار
ه ،ا ر ی ن ی داده ن دن ،ا در ا اد روش ● ارا راه :
ده رد ا و ان ا ر ر ای ارز . راه ی
از آن ا . ی ای )(polynomial راه اب ا .
داده ورودی' د 'آز و ●
زم . ن را داد ط .در ده زی :راه د را ده زی ●
ا و ا ادی ارد . ح . ا د ی را ا ط از
، دن ر در ، ا د آن و را ا و ا
د . ا ه ز ،و م
م را ده ا ر د را :از آ ا م ور ●
ت ب از ا ای ا آن را در ده زی ده ا .ا ر ن د د
د . ی را دار . ب ا
ب ن د را ا داده ی ورودی :از ●
. ه را ای .ا ر
د از ا ای ا ا ی .۲.۲
رت ل را ح در د ا ا ی ا راه ا ای در ا
د . ح
د : ه از ال ز در ل :ض
دو ان و ،ا ای د و ه ) (targetداده ه ا . و ای از ا اد د
راه ورودی د ای ار و ه ا را دا .ض ن ا از ا د
و د دارد .
ز ان د ( .ض را درک) ده آوردن :ا ا
... ها ورودی داده
د . ن را در ا .دز د درون )آرا ( ورودی. ای از
ن 10 زوج د ی ا ای . 10 ...و ار و ه د
5+5 و 2+8 دو ا ای ا ورودی و د دارد دو ا دا .در ه اول د را
ه ه در ن ار .ض ا ا ع را .ا ا 10
0 و 2 ی آ و 8 و 2 و و رد ا .ا زوج ی زو وت ا
ا .
( .ا ر ی ) راه و آن را را ای ا ی ا ر ل
. ار و ه و را دو دو د ا ای ی
ا ٓ ) آز و ده از داده ی ورودی ح د زوج ی د در ل ق ا
ی اش زوج) ,(8 ,2) ، 8 ,5) اول در ر از داده ورودی( .ان ل د
زوج i+1 ا ی در i ام م در د . (8 ,15را
دو ار ه ا ه ار و ه ان ، زوج ی د .در را
n * (n-1)/2 ، زوج ی ی روش دا .در ه را ان
. ) O(n2 ا ا ر ا د آورد. د را زوج
ا ا روش . ا وا او راه ه را ای ا در ا
ا ه را ای ا . ا و روی
د .ا از ر داده ی ز دی دار و ا د ا ر
ی ا ن ی داده د د ا ر ر دن ا را د؟ در ا
ر ؟ ا داده را ؟ ا را
. ن ی د را ای راه م م د دی ض ا ا
از ا .در را ا راه ای ا دن ا ز
ی از ا .ا ای ا را و راه از
ده دی ن را ده) ی ه ا ا زه د راه از
ده دن در راه از دا د و ( . د زی ا ر در و
. را ده راه د ا زه ه ا ر ا . ون ده زی
آن را در ی ای و را ) ده زی( .ا ا م ا وع ده زی
. ه را د و ه ی آن را ای را و .(۱ )
، ان ا ای از ا اد ا .ر ی دو وی د او را ا nums
ده . ده روش ای ده زی ا را و ار و ه از ا دو
.ای از ا ا ا را و ، ۳ ) ی .(۶ ۳ ) در از دو
.ار در را از آن ا ی ط (۶ ۴ م درو ) و ، در
ع د آ ع ا زوج . را ا د از درو زوج
. ز ا روش را ده د. ار و ه آ و ا
1. def twoSum(nums, target):
2. )nums_len = len(nums
3. for i in range(nums_len):
4. for j in range(i+1, nums_len):
5. if nums[i] + nums[j]==target:
6. ]return [i , j
.ای ا ر ا ول ا ا ورودی ل رت د ق را روی ا ای
د را وز را ن د و ا ای ا ر رت د آن وا د ر روی
. را ی آن و ار ی د ا روی ار ار .و
. ر در ا ا رت د ل ا ر را ا
ارا راه
ق روی ی ا ر ا . دا راه ی در ا رت
( . )ارا راه د ادا راه دن ای ا ،
از ا ر و ا اد روش راه راه روش ی و و د دار .از ای
ا ر ر . ا م ای ار ی ا ح ا ر ر ی اری ا م د .ا
ا راه ی ا . در ا د روش د
. ا ر را ا ا ن ی داده
ق آن ا ار . ا د ا راه د ای ا ای
د ای ا و د دارد .ا (target-x در آن) xای را در
.راه داده ه ار target-x را ،در ار x در ،ازای
ر ا .ی آن .ا ا روش را ر از ا ا ا ر آن ا
آ ا ون ده ی ا ن داده د ا از
ه و د دارد؟ داده ار در
و ا آن را ان و د را ر ا ا ا ا ای
دو ره ا از ا ای . ی) (hashtable dictionaryا ا ٓن را ان ار د
x در ی و د دارد؟ ا آ target-x در د ر ار x در و ای وع
ر و د ا دا . x و target-x را ان ی و د دا آ ه ا د
O(n) ا د . ارا ه دارای ) (O(1ا ،ا ر ی در ) در د
در ی ،ا ا ر n ر ی د ه ح د ای
. ده ا ی ا ر
اول ا ای آن روی ل ق را د ل . در د از در ای ا
داده ورودی( . د )آز د ی را د
آرا دور ا ن از ی د و
ی وار -5 را د آن .د ن ار 14 ان ل ,و د دو ره وع از ا ای
4 رو . ی اغ 14 ار . ا ی و د ارد . .ا ار در د
ا .ار را ، ی 5 در د ا . ی وار 5 را در د آن
4 ط ا ا . او آن را در ی ا 5 در د ط
دا . ار ] [1 ,3را ا ا ر . (3 ی) 5در د ط ار (1و )
دو ای ده زی ) ده زی( .ا ا ر را ا ل وع ده زی ا ر
ی را ،ا ا د در ز ن . را د ی و د ا ر
ی و ار( د ) ان زوج را اه ا .در ر وار
د .(1 ) و را ادا د .ا ا م در و ا
رو .(7 3 ) ار در .(2 ) آ ه در ی د
ط ی ا و ا را ی و د دارد؟ در رت و د i ام در د ا ٓ وار
ی ا iام را د ی و i ا د 4 ) و .(5 در ا رت در د اب ار
د . ر ادا (7و )
و آرا دل در ن a[i] a د . در ز ن )- (i + 1ام ا .ان ل
. ا آرا آن ا ل وت در ه ده زی ،وت ا .
را در ۱۰ روز آ ه ر ارزش م ر د دارد .ا ا ا ا ری از در
د و را از در روز ا :در ا رت ار ارزش ده از راه ا ،
ن در ه ر
a = []
ای ی ( . ی ) راه ا ی ،او راه ح روش در
از روز ی و از روز ای -وش را ،در ت ا
روز و ا ر ه ده در ا آور .ای ا ر ا از دو آن ای وش ،
و .در ار را (j در روز وش) درو ا (i و ر ه )
آن (i+1) آ درو از ده از ی ،ا ( و ای رو ) روز اغ
د آ ه ،ان د را -وش .ای (n-1) را ان روز وش در
ا روش را رت د وا ا .در د را -و .
. ا ر در ن ا
روز از روز ی آن( ، در ، ا ا ر ) ای
آ ه n*(n-1)/2 داده ی م را در آن دار n -وش را زد .ا اد روز ش
. ) O(n2 ا ا ر ا . ن ا -وش را
ی ا راه ه از ا .ا م در ای ا ی ا ر
.
د دن آن را ر و در وا راه ای ا دن راه ا
ا ا ر در وا ر ارا ه ی در رد ه ر ا ر . ح و ا
از ا د (n-1 i+1 را . ا ) ( از ) ر
آورد . از روز را در
دور در وا ار ی ز دی را ای ه روش
را ن د ( ا م د .ا ار ی ا ا ر را n ر n) ل از
(n-1 i+1 و ای از) i ا از .ا در
د .در وا n-1 i+2 د ل ی آن i+1 در دور ، از
از ا ای آن د را در آن ه ای از
( . i+1را )
د( از ف ) ون آوردن ار ای راه را در ل
ا ودن آن ا اد راه .( در ض دا ار ) از ا ای
ا :در وا ای از آن را و آوردن ار و
. را و ار
و وزر د ی ف ای درو ا ر را ا ای ف ر ی اری در
.ای ا ر ا ا ر را ا رت ( ) و ا ودن ،
آن ب و روز ی ر روز D را ان روز وش ا :از ا ای ض
ا ا وش در روز D د -وش آور ) ارا راه .( ا م را
ا م د .
روز ز ن ای ا ا روز رم را و دار ان ل
ای روز را ا ز ا ا ا . در روز ی (8) م ا
. را و و ارد روز ی را ای ا دن ار ا در روز
دو ره .ا زی م در روز رم (17) را ( و ) 8
. را از ا ا روز
را ا ا م در روز ی روز ان روز وش ، در
ا د اب آ ه ار . ا ا ان را ای از روز ی را د
ا ا ر را روی داده ورودی دور ( .در رد ا د) ا ر
ا . ا ر در
دارد ا ر ا ا ر ا ا ا ای
.ای ا را در روز ی م را دار ار د .ای ار ، اد روز
ا ) د O(1) ا م ا ر . م در روز را ا ر
ا ، n ا ا ل ا ارد . اد ن داده د( و
. ا ر )O(n
.(2 ) و را از ع م . وع
ن( در در ار ر ) رت د م ار او اری م pmin ای
4 ) در د ار او اری د م profit ای .(3 )
ار را وز . ای ا ر ار در ار ان ده از ا ( .
در در روز i ام را ض .(7 ) آ ه د را و
آ . را در روزi ام و د در ر .ا ار روز ی
8 ) د در و ان ان در روز ی د ا ار را
را دا .(10 ) ز ده زی ا ر را د ار ان ( .از ا م
د . ن
دی از زه n 1 در ا ای :اد n-1 د اری د n 1 داده ه ا .
. ه( را ) د n-1د
( .ا 7 د ه ا ) را در :ر را ل وع
. آ 6 ه ،د رت ز دا اری در زه 8 1
د در زه 8 1 از 7
ده از ( .ای ا ر ا ی ) راه را ر ی ا ا روش ای
ا د اب رد ا اد د .اری در از ا اد n 1 درون ار ر د ل
د .از آ در ار د ه n ا در ا رت در آ .در
.ا n*(n-1) ،اد را ار اره
. ) O(n2 ا ا ر
را ل ا روش آن ا ر ر ز ن د .ا ا روش ا و روی
ی دن داده ان روش .در ل ده ای ا ات در دور ی و از
( . ا اد راه د داد ) را
دن د؟ ا ر را آ ا ا در ادا ای راه ر
. ز ق
) ا ار i-1 در از ار ه ،د i در ق د در
ار از . ا اد را وع د( .ا ای راه ا از
i د آ ه ار .ا د i+1 در ا ده (n-2 ا (0 ا ی آن ) ا ) ا از ا ای
. ز ا ا ر را ده (. ا )ارا راه (i+1 ه را )
1. def findMissing(nums, n):
2. )nums = sorted(nums
3. for i in range(1, n):
4. if nums[i-1] != i:
5. return i
6. return n
ت ا م ه در ه را ا ا ا ش ا ا ر ،ا ای
ا n-1 ر ار د ، و ن ا ا ر دارای (2 ) sortرا در
O(n*log(n)) د sort دارای ا O(n) ا .ا در وا
د . )) O(n*log(nا ا ،
) راه ای .در ادا د زی ا ازه ای ش را ده از راه ا
د . ) (O(nرا ادا
ع د از n 1 و د ل ای ا ا ای ا دن روش
و د ارد ،ان آن را .از آ د ه در ا ل S=n * (n+1)/2 دارد .ا
د . ن ده زی ا روش را ز (. ا د )ارا راه ع Sو ا س وت
1. def findMissing(nums, n):
2. )return n * (n+1) / 2 - sum(nums
sum ا ا ر ا . را ع (2 ) sum
. )O(n ا
(String) ر.۵
ن ) (String در ۱.۵ر
د ا م داد روی ر ا م د .وت آن ار ا .ر ن داده ر روی
ا ار را در ر را ان ض د .(immutable) وه ا ،ر ی و ه ای روی ا ع ص از
.ان ل upper ن را در درون آن ده زی ه ا ر را ای اول ا در
ن در ه ر ر
a = “” ر
.ا او ر ی م ا ار را در دو ر ن د ه ای :
دا . وی دن 0را رت ار ،-1و در دو ار ،1 ی
د آن "1.02.1" م ا اری "1.02" و ( .ا ) :ر را ل وع
"1.02" ا و ط و ا اول از (".1" ن د ورژن "1.02.1" آ ر دوم) ا ٓ ه
ا ار -1 را دا .ا و "1.02.1" ورودی دوم ا "1.02" ورودی اول ا ا .
ی ارد .ا (02 در ار دی ورژن دوم) در -1 ا ز ا ز ر او "1.2"
. در وا ا دو ورژن ""1.02.0 دو ر
را ای ا ال (> , < ,== ای) ی ده از ا ا ل ی وا
ا اد راه ( . ) را در در 0 ی ای ر د ،ز ا
را) ارا راه د ر از دو ر را ی ا راه در د دی
و ر " [1 ,2] در از د .( ان ل ،ر "1.2" را ا رت
از را او . [1 ,2 ,1] در دا از د "1.02.1را رت
و ا ام ر ا .در ر دو وت ای دو
ا . م ا ار دو ا ا
ه ن رد را ای در ذ ن و وع ده زی ا ر
.ا ز دو را ای ی ( >> .را ن را داد د )
2 ) و .(3 ا ی ورژن را ده از split ا ورژ ی ورودی دارد .(1 )
<<. )(None version1 ار را آ ر ا ا ا
ی ا ط را ر . ا ال ن د آ زم ه ا از
.ر ا رد را ا ا ورودی و را وا ورودی در
ا ط را ه و ای ا . در ا د آن را ا ده ا و
ورده ا .
ده . ای ا ر از map ا ی ورژن را در آورد آ را د >> از آ
.(2 ) ا ر را ای ر دوم ( را د ی ) در وا د
<<.(3 ) د ا م
اغ ار .ای ا ر ا را دو
را دا (۲) ، در ا رت ه از د ی ر از د (۱) رود
. ی ر وی ا د دو دوم ا . ا ی
ر ر را ان را ا ازه از وج از
.ا د ا ا ر ص ا را در ا در رد ا ا م
ر ی "1.2" و "1.2.0" ی . ر ه ا
ا ، دوم ا و 1 ا دو ا ر از [1 ,2] و .[1 ,2 ,0] و د ا
ا دو م ا ار ا د . ا ،و را در دوم 1 در ا د د از ا
ا .
را .ا ر ه آ ا را ا ای ا
. ا و ا
را ا ا دو ده : در ا ب ا ،از ص از ر ط ی ا ای ا
. را ا در 5 ا ا وت ل در . آ را و ا ازه
ط 6 و .(7 در ا دو ) ا ر ا اد ن را ت ز ن ده از ا ا
ار ای ط 9 و (11 و زی ) ای ی را
دا . را در دا . ا
داده .د ل دن "Helloرا روی ا ر ورودی World" ه از ا
از ر دو را ز ا ب د ورودی ،و " "World Hello
د را در و ا .ا ا ق د ه ر split رخ د ر را از
.
را ف ،split ده ت ا از رو ای ا دن ا ا ا ا ر را
ده از split درون راه ای ا ر و د دارد و آن ا ر ارد . و در ا در
ی ا .ا روش ازای ه (regular expression) ای ا دن ر در ط رات
ه را ا ا ده از رات ه ا ا در ز ن ا د . در ر
ز دار و ه ن د ه آن ا ذ ،ای ا ا آن را ده ، ح دن ا
ب ا . ت از .ا را در ای ی
. ز را ده اب در ا ه دا رات ای رذ ا
1. import re
ef reverseWords(s):
2. d
)))3. " ".join(reversed(re.split('\s', s
، ده ه از ا از ا ا ن ا ن ه ذ ده از رت ا ا ا ه ا
. را روش د ی و ا هد
ه ر اول و در وا دل ر ا د در ورودی و و ل
"dlroW "Helloر olleH" دن ر World" ه ا . از آن و
.ا "World Hello" د ا ت در ی د ر از دن ر .
. ر ا ر در
ا ر ا م د . ا در دو دن ر ا
دن را روی ا . ای ا ا ر را ا در
ی داده ه از ر را در ا ز ر د اه ا ا م د را ر
.
ه را ای ط را ر . وع ا ذ
.ا ر را ان ورودی د .در ادا ا ا ر را ای در د .ا ا م
ن ن ر .(2 ) ا ر را ا د ا م د در ز ن از را
را و را ز ا .در ادا (immutable) داده
دن ر (9 ) ط .(7 4 از ا ای ) در آن زه را د و
ر را ی ده . در ا را ط (15 10 ا ت) دن و
ز . را
1. def reverseWords(s):
2. c = list(s)
3.
4. def inverse_helper(left, right):
5. while (left<right):
6. c[left], c[right] = c[right], c[left]
7. left, right = left+1, right-1
8.
9. inverse_helper(0, len(s)-1)
10. p = 0
11. for i in range(len(s)):
12. if c[i] == ' ':
13. inverse_helper(p, i-1)
14. p = i+1
15. inverse_helper(p, len(s)-1)
16. return "".join(c)
ر را ر درون ت و را آن را ر ر ا :
. O(n) ا ا ر ا . ٓا
؟ ا ۳.۵آ
ی ز و آ ا ای داده ه ا . ی ز و :ر از ا
.
درک ده ا .در ر "(()" اد آن را ر را ل وع :
ی ز و .در ر ")(()" اد ا ی ز و ق دو وی ا ا ، ی ز و ا
ا ز .ان ل ا او ن ا ا ا
،در ر ی "()(())" و "(((()))())" ا ی ز و .ان ل ی آن
.
ا ر ده ا ی آن ش ارد . م رو ی ا ر در رد ا
آن ا ذا ا ی . ذا ر ا - ارا
ا زوج دارد . ی ه ا آ ه ر ('()' آن را ف ) ا زوج
ا د . ه ی ر را ف ، آ ه ا ('()' در ر ) ا ز و
ا .ا ن ر ا ر "())(()" ر ")(()" ر ر ف زوج
را ر .ا اد آ وت ی ز و ا ا اد ا ا ا ر
،در م ر ز ر "()" را ا ی ز و ا .در ر اد ا ا
( (۲) ، د ز ر "()" (۱) ر م د ) ای ر از دا ر ف و ا ر را ز
O(n^2) دارای .ا ا ر در ( ار ا د) در ر
ا ا ر را .در ا از ا ا و ر را ز ر "()" ر ز ا ای
. ر در ه ی داده روی
ی ا ا ر آن ا ر ی اری ا م د . و د ا ا ر در ا ا ا .
.ای ر ا ر از ا ای ر دو ره وع ای ا دن زوج ا ز و ص ا
.ای ا ر از ا ای د از ا ای ر ی ر ای ر ا ر را
. Y در ر ا (")" را در ا ) او ا ر وع
X و Y زوج ی در .ا د ا X ("(" آن را در او ا ز)
) از ا ی ا آ را از ر ف ی آ را را د ری آ ار .در
. ر ا آ د ت *(
دن (")" ی ادا د .و ا ر را ) ی ا Y+1 ر را ای از ا
ر را ر رت ی ا ای و ز ا م د .ا ی ا
Y را ا ای ر ر . ا ی ر را ی ز در ا .ای
د . ن ) O(n2ا ا ا ر ا
در ا ده ه ای ا ("(" ا ا ز) ا ر ق ن
ا ا ز دار ا ا ،آ وا ز رت Y ا .ا
ز دا ن آن ا در ا Y و د دارد؟ ده ه در ا ز ا
Y ده ه در ا ز ا ا ا ار و زوج ا ی
. ز د ا ر راه را ای آن را ا .ا زم ار ا ا
Y و د در ا ه در ا ا آ ا ا ا
آن در ،1 ا ز در ا دارد؟ ان ل در ر "())(()" ر ن او ا
ا ز 2 در ر ( و .در ا رت اد ا ی) اغ ا و د دارد .در
2 و د ارد و در در ا ای ا ا زو آن و د دارد . ه در ده ا
. ر ا
ه ا Y را ا . ده ه در ا ا اد ا ی ا ر ه
ه ا ز . وا از ار ر ه ده و در ه ا ز را ا
،Y ار ا در ا ه ا روی ر .ا در ر ه ا وا ا
روی ر م د و در ا . ی ر ا ،ا ٓ ه ر ه
و در از ا ی ز ن د ه آن ا اد ا از ار ر ه
. ،ا ا دو .در یر ا ز
آن O(n) ه ، ر را ر ل n را در ا ا ر ا
.
آ ا ر ا در ا ای ا ر روی ر ی ل ر وا در
. ده زی ا ر وع .
ب .(1 ) ای و ورودی آن ا د .ا ا م را ط ن
.(2 ) وی در ر در و ی ز و ر ه ای ر ه ای اد ا
اد ه ا و ا ی ر .ز ار ده از ی ر ا روی را
ادا د .(3 ) در در ا ر وی( وی) ه ر ی ا
د .در وا ا ا را ا ز را i ام ر ر ه count را وا ا ا ادا
از در وا ای .در ر ا ی ز ا ر ه ا وا اد
ر ده از ی ز .(4 ) ا را ا از ر ه ا و در ده ی ز را ا ا
ر .در رد ا ر آن را ا ا ا
ده ا . را ا
و م د ا ی .(5 ) ر آ ده دازش ا ا ر ه
در ر رخ د اد .ا ه از ی ز ر ه اد ا و ا ر ه
.در ا رت ر ه count ا و را ی ا ای از ا ای ی ز در ا
ی و د دا ا آ ه count ار -1ا . ل ا از ا م ا ای
ده ا .ا ار ی از ا ی ز ر اد ا ا .ا ار count ر از
ده ا ی ز ای از ر اد ا ا در ا از count
True را دا .در ر ار count آ ه ار False را ا .ل ا ار
.(6 د ) را در not count دا .ا
1. def parenthesesMatch(str):
2. count, i = 0, 0
3. while i < len(str) and 0<=count:
4. count += 1 if str[i] == '(' else -1
5. i += 1
6. return not count
ن در ه ر
s = []
؟ ۲.۶آ
ی .([]{}() را داده ه ا ) د ،و و ( ز و ا ،ا ٓ ی ) :ر از
. ی زو آ ای
.در ر "]{}" ی از ع .در ر "{}[]()" :ر را ل وع
را "[" ،در ن و ز، و د ارد ز ا از در ر "{[}]" ارد . و
آن ا در آ ا از ر ی ار دارد . د دوم ر آ ا
ه دارای را از آن ف ، ر د و ا زوج ([] {} () ا )
د . ا
را از ر ف . ا ار ا ر ر آن ا ر زوج ا راه ده ای ا
د آ ه در آن و زوج ده ا .ا ر ی آ ه ر او دارای
ا ر ر را ده ا .ا ا ر ازای ی ر او دارای
. )O(n^2 آن در ا .
ی ا ا .ا راه از ی اری ر ای ل ا روش ا
ی ز ای .ا ر ه را ی و ا ی آن ر ا ای ر ی
و د دارد . ای ر دن ر ه رد و در رت ه را
ز آن را ه . ده ه را ز ا آ
ی ز ه ر ر First>> دن و ف دن در ا . ا ی ز ا ا ی
ده ا ای ا ن داده م را ا . ا از ن داده <<in Last Out
.
ار .د ن ز آن را روی .د ن ر وع از در ا ر
"(" ای ) د ه ه .ا روی را ر ی
را ز ی ا د ه ا . ")" و "{" ای "}" و "[" ای ( "]" ا
و د ارد . ی ر .در ف ده و آن را ف
ار د ، ر رو ز و ر ر را ا ا ر ا
. ا ا ر )O(n
"(){[]}" و د ی ر ر آن را ا روی دو ورودی ا ر از در ای ا
ا ا و و را .ای ر ن ا "{[}]" رت د
د :
او ار از آن ر از آن ای ار در ا ای از د دار . :
ار1 ی و د ا ار ای دا .ا را رت و را
د . ا -
ه ا . ز داده .ض درک ا آن را ل وع را :ر
ورودی
14 از 3 ر از آن 14 ا .او ر از آن او ار از 4 درون
ز ار د . .ا ار -1 در آن ی از 14 ر از آن
.
ب
ی ر از .در ا ا ر ای وع ی از روش ان م
(۲) ، ار ر از آن (۱) از آن را ر ،ی ار در
ا ا ر را ای n . را ا ی .در ا ی
ل ا ا ر آن ا از .ا ا ا ر O(n2 ) ا م د ،
ای ای ده . ان ل و د ا ی ا ای ای ی
،ا ز ای ار (14 رد ) 3 ا ی ار (4 ) ا
. ار (14را )3 ا 1 ا اب ای
،آ 1 را دا ا ب ای ا اب د . ا ر ا ض
) 1 ار (3 ر از ا ز ا در د؟ اب ا ای
در ا ای ا ا ا و (2 از آن ا ار) 1
. ز راه ه ذ را ای .ا
را ا ؟ ان ل ض ده از ا ن ا ا ر آ وع از ا ی
د از 14 ا ا . را ای آ ده و ار 14 را از ا ی
14 زی ر از او ا د ای ،7 ،13 و (12 از آن )
از آ ( 14 .ز ا 14 از آ ر ا ) در ا رت 14 اب ده از آ ا
از را ا . از آن در ا رت
. ده ا ن داده ا از دار .ای ا ی را در رو ه
وع و و را ا د :از ا ر
ر از آن ا اب ی . ا ی آن را .د ن
ا ی ر از دار ا .در ا رت آ ر از ی را
ا . ا .در ا رت ار ی ار -1 د .ا
ا ن رو ه ای و ا ا آن را ی از ی ار
.
د .در ل ز در ر دی را روی ل ق ا ا ا ر
ه ا . داده رو ا ا از را ده ا .دآور ار 1را
از ا ای ا ر روی داده ورودی
ز . آن را . ر ه در روی ل داده ا ا ر
و را ورودی را د .ا ا ری را در
را ورودی ل .(2 ) ) .(1
ار از ا ی در ار او -1 د .(3 ) دارد . ای
( ض ) -1 آ ه ار .(5 ) ا ای
ط 7و .(8 ار ) روی را ا ا ی در ز ا .
دار ) از ی در ی i ام ی ر از ز
.(12 ) i ام را از ،در رت و د ،ار او ر ی .(9
ده .(13 ) در ا آن( ا ی) ای ار د در i ام را روی
.(14 دا ) را
(Queue) .۷
)َ (Queue ۱.۷
ی ده زی د .ه د ن داده ا روی
ر د .ا ر و در ن داده ا د ص ا و
ن در ه ر
از دن ده د .در ا رت ای ا ا ان ن ان از در
دارای ت ف .ا اد ا ر آن ا ده از pop(0) ا appendو ف از ا ای
from collections i mport deque ا ودن ژول
از ا اد داده ه ا .ا ن ، end) و د وع ، start) :د
.ا در د ن را ،اد ار زم ا ،د وع ا از
اد ای . ده ه آن را 1000 ا ع ر از 1000 ت
دا . را ای ر ن از ا ا ا
آن را ب درک ده ا .ا ار وع ,2 ار ا 9 و را ل وع :
از 9 2 ر .ا ا 3 را 2 آ ه ان رو ی داده ه [3,4]
.ا ا 2 ر از 9 = 5+4 4 را آن ا ا ار . 5 = 2 + 3
. از ا ا ا ده ا
آ ه ا 40 را داده ه [3 ,40] و د ،ا ار وع 999 و ار ن 42 ان
ه آن را 1000 ب . ا 1039 ا . ار وع ا
.ا را ی د را .ر ا ودن 3 ار 42 39 = (999+40)%1000 ار
. رد ز اد داده ه اد 2 ای د وع ،ن ،و ن ا
و ده از آ ه ان ا [5 ,10] د ا ار ا ا ،1 ار ا ،7 و ار ان
دا . ار -1را رت ر .در ا ار ا ا ا از
از ار وع ار ن م ا ر رو .در ی ان او ا ر اغ
دا . ان د ر را اد ز . را
وع از ,999 ل ز .در ل ی ن ه ر د ا ر ای وا
2 ع از 1000 رد د و ع ... ,3 ا در ا ,3 ،3 ا ودن ,3
.ا ودن اد ز دی ا ودن ار 44 3 .در 41 ع ای در ر و
ر د رد ن از 1000 . 1001 ر و ا ودن اد د ی 3 ار 43 3ار
از ا 3 از ار ی ی د .در ا د اد و .ا ار 42
. ن ده از 4را ا ده از 3و ا ا دو ع ر ن .در وا ده 40ا
آ را و د از در در آن را ا . ر در و د ل دن
د . ن
ار ای ر ن ی ها د از در
د ار را رت در ز ن ی ا در ا ر
درون ا در م در ن د .ا ی را ا ان و
. ی ا از از ا م ( د درون اد ب دار ) ا
آن د . از د در ا ا دارای ی ا ا ر
ا 1000 ی ای ر ن از ار وع ن و د دارد ز ا ا
دد . ود و دو ره
ی د .ا رت دی را ی ا ر ی از ا ای ا
.در ا رت ،و د ا آ اری ی ود آ ا د ه را
ه ا .د آن ی در اد ا را ا د
ار . اد اری دار از ا
ا . دارای ی زی ،روش ا
از د آن ا د ا روش ل ا ا
را ا .رت د ، ا زد ،در را رت
ر ن ار اری( را ادا ر ن د ا م ن) د ی روش
د .
را ا .در ا روش ای ، روش در در روش
.در داز ه ای ت ده از ا ر ن ا . ا ا رت ازی ز و
د .ا ر را را ر م ده از روش ا ا ر ن ا ض ،
ر -- bfs ا - اف-اس( ا م breadth-first search) ا ی اول ه م روش
د .
را ز .در او ی ده و وع ا ای ا ر از
د .ا د د .در ا اد م اد
رت ای ا م د .ا ر را ار از ر ا ودن
ع ه ) د وی در ا ن ،ا ادا د ار ز
در .ز ار دارای ار .او اری( و د ا
دا . ار -1را ار در وا ا ر ا ن
ده . ای ا ر ا ن داده از و ادا دادن آ رت ای دا
ع دار ) در وا از ا ای را دارد .ر ار ا ٓ
و دا ی از ) ( و ازای از
. ا ا ر را در ر ا م د ا را ا ی ( ز .
را ز د دا ادا د . .ا ر را د ن ار ن د ه ه ار
د . ن ا اد ] ([3 ,40از ل ی ق ،42و د ا ا ،999ا ای ل دوم )
را ا ی از آن دار و ( از ) ار ر . در در ار د
. ا
. ا ا ا ر در را ا ل داده ه ار ن ر ا ر ا
ای ر ن آن ا م داد . و ار ن ر ،دا دارد و آن ا
روش ا م داد : ان ر را .ا م از در ای ا در ا
آن را اه آن دار .ان ل اه 999 ره ره -۱وه ار
. از آن را ی ار ره ا ار ده از ا دار .ا 0را
اری را ط .از ا و : ده ا -۲از دو
. از در ط ن د ده و از ر ه ا
د ع ی .ا آ و ن از ون
آن و ر را ادا د .ا رو را را ، ن د . را
د . ادا ا م ار د ن
.در ا روش از ار و ا د در 999 0 ی -۳د ا د ه در
1000 ا و ار آن ده . ل ا ( ا آن ) از ا
ز در ا -1 ه ا .ار او آن ار در
ار وع 999 ) در ل ق( ار 0 را ار د ن د در ه ه ا .در ا
آ ه ار ن (۱) ا ار X ا ون ه ار X از ا د ه ا .
ی ، و (۲) در ا رت ت رد ز را اد X ام در
X ام آن از ر را ا ه ار و در را
د . ار وه
ی ورودی ی ا دا و ای ورودی 1000 ا ازه روش م ون
. ده ها د ا د ط ا روش ای د ل دن د. ده ا ا
ده ژول deque را آ ده ا ن داده از .ای ا ا او ف وع ده زی ا ر
.(2 ) در 3 ا ده ای ا ی م و را .(1 ) ا
ا م د . د ده ا و د ا .ا ر ای ای ار
.ا ار1 ا از د وع ن از ار (end از ) د
ط 5و .(6 دا ) -را
م step ل 1000 ار ( در آن ار دارد از ) ار ای د ل دن
.(8 ) او -1ای
وع را در آن ار د .(10 ) از آ ری ای ر ن د و
ار در .(11 ) را ا ط آن در ،ار وع زم
د( ر ی در زه 999 0 در د د د د) د ا ز
آن د ن (15 ) و ا ودن ، از ا ای دا را ا م د .ا ر
ز ط .(21 13 ) ا ودن آن ،و آن ای ا د د د
. ا ا ر را ده زی
1. from collections import deque
2. def minSteps(start, end, nums):
3. mod_value = 1000
4.
5. if mod_value<end or end<0:
6. return -1
7.
8. step = [-1] * mod_value
9.
10. q = deque([start])
11. step[start] = 0
12.
13. while q:
14. value = q.popleft()
15. if value == end:
16. return step[value]
17. for n in nums:
18. new_value = (value + n) % mod_value
19. if step[new_value]==-1:
20. q.append(new_value)
21. step[new_value] = step[value] + 1
22. return -1
: ا ق ا ر ای
در و د mod_value-1 0 زه در د از د ا ر ا از در
ا آ ه ، د ن n را ل ا . د ار (nums ) ل
.د اO(n) ا ا ر
(Linked List) ی .۸
ی ۱.۸
ا . دار ا ازه ز ن داده ا در ی
ی ده زی ی دار ،را ان رت ،اد و
ا د ا ره دادن ا از ر از ا ی .
و دش ا ل آن و د دارد ا .در ر ار ای
س ا ه Node ا . ری ی ا .راه ده ده زی
class Node:
def __init__(self, value):
self.value = value
self.next = None
: رت ا و دو ه ای
)node1 = Node(100
)node2 = Node(200
node1.next = node2
. رت ز ه ا درون
ی و ا ع ده د .ا ن رت 100->200 را ا
م دارد .
را ۲.۸
د د ای و آن را ی و د در ای :
ر وی و . از x از د ر وی x ار
.
ی آن را در درک ده ا . را ل وع :
از 9 د ی ،آ ه در و x=9 د 15->2->11->5->9->12 دا
رت 2->5->15->11->9->12در آ . ا . آن ار آن و
ر وی x و د ی ا ی ا ا د دو راه ای ا ده
را و از ر ،ا دو .از ا دن د از x
و را ر ی ا ا د آ .ای ا د دو ه
. و از دو ا ی ام د ن
.ا ر ن ی ل ا آن را روی ن ا ا ر ا از در ای ا
ز را ر ن . م ده زی ی next را در ا ره د
و دو ی ا ا ا ز و در ا ا ای ا ر را ح د و د ل .
از (x را ن ر وی (x و) less_list ) greater_eq_list ی
د .
. ی ی و یا او و
د . ن را ا اول از ز و
وی و 2ا ی ر ار 15ا ی . ا اول از ی ی و
د . ا
ی از د .ا greater_eq_list ا اول ر از 9 ا
آ ا ز دار ا ره ی دا . ا آن را ا ی ا ر از 9
.در (greater و g دآور ی دم ا tail را ا .ا ا ا ره را) gtail ا
less_list ا ، از 9 آن ر .ا دو ا ادا
ا ره ی ا ی آن را دارد . ی .ا ره م ltail ای ا اش
. ا ر را greater_eq_list ا ا .ا آن را ا ی ی ار 11 دارد از 9
آ ار gtail را وز gtail ا م د . آ ا ره next
ا ره ا و ا م د .ر ن ا ی .ا ر را ر ن ا ی ا ره
د . ا
یا از ی ی و
ی را در ا ا ا و وی را در ر ی ر ب ا
د .
. ر از x ار از ای را ا دو
ر وی ا ره (۲) ، ار next ا ای ا ی ای ا ر (۱)
ا ره head ا ای د ،و (۳) ر وی null در ا در
د . ن را ا ره ز و . ا ره او
در ده زی ادی ا ره و و ا ر در ا او ف
ا .ا ب آن ا ا دارای ز دار .از آ ا
ا ا ( ا ا ر O(n) ) ،آ ه n دار ،ا ل ز
. ا از آن وا ر
را . ا رت ر ا در رد روش ده زی د ی رت
ی ر وی ار x د آن . ا ی دو ره از ا ای . را ا
روش ا د دو .ا ا ر دارای و در ا رت ری را ا ی
. را دو ر وت یا .ا
ر ا ر اول را ا و ده زی آن ا ا د .ا وع ده زی روش اول
ی و اری x را آن د .(1 ) اول ی و را .ا ا م
.(2 ) ا ره ای ا ره وی x ر از ای
در ط 5 و .(6 ) از x در ی ای .(3 ) ا
ر ار آن ا ی را رو و در ار ر
ی ر آ ط .(16 8 در ا ار ا ره ) ا وی
ر وی را ا ای ی آ و ا ره وی (gtail) را null
دا 20 ) را ان ا ای ا ا ر 18 ) و .(19 در ا
( .
(Binary Tree) دودو در.۹
دودو ۱.۹در
در وارون را آن ا ار ط اری داده ن داده ای در دودو
ر . ر داده در ر د ی ا و ه در ا دو ز دارد .ا
ل x + y را ان رت در دودو ر + و x ان ز و y ان
را در ر ب از ی د ان ز را ن داد .ان
دارد .ا ر ی ا د ه ای دازش ن داد د ار در دودو
ا ا در .وا در دودو رت دازش ای ا داده د ون آن ا ن
ده ی دار .ا ل ،ر د ی ی دودو در دودو ی دودو ص ،در
و ا ای ا ر ی روی در دودو و د ارد .ده زی اردی ای ا ن در ز ن
ای ن دادن ار س ا م د .ا س دارای ه در دودو
1. class Node:
2. def __init__(self, data):
3. elf.data
s = data
4. elf.left
s = None
5. elf.right = None
s
root = Node(“a”)
root.left = Node(“d”)
root.right = Node (“b”)
root.right.left = Node(“c”)
X در
را ا رت ن د :ه :در دودو داده د رت ر
رت ر ای . ز در و را روی ار ا .
. دودو را در
آن را در درک ده ا .ض در رت را ل وع :
. )4 * (2-9 رت ر دل ز را دار .ا در ر
ب ز در ا رت .ا آن ) * ب( ر ا در
ب را ب دا .ا از آ ا را ز در (4 در )
ا ا ( ) - را را ز دار .ر ز در ز در
ا ز در 9 - 2 2 و (9 ا د .ا و را آن) ز در ی ز در ا
ب را ا ل ده و را ر را دار ا ز در ا ن ا . = -7
ر . -28 = (-7)*4
ای د از ا ر ز در ط رت ر آوردن ا روش
ا ا آوردن ار ز در در ر ر ی ز در :ای ده ا
ر را .آ ه را آن را رت ز ز در و ز در
آن د ار ، .در ر ار ر ز در د ز در و را ا ا روی
دی ا .
. ل قا ا ا ا ر ،آن را روی در ن از در ای ا
در ار ای ر -۱
*( ) هر
ار ز در - ۱.۱
ا . ار 4 د ان ر .ن ار 4 ه
را ار ز در - ۲.۱
(- ) ز در هر
ز در -۱.۲.۱
ان دا ن آن و ان ر ار 2 ه
را ز در -۲.۲.۱
ان دا ن آن و ان ر ار 9 ه
دا ن -7 ) (9و را ) (2و ز در ز در -روی ا ل
دا ن -28 ) (-7و را ) (4و ز در ز در * روی ا ل
. را در ل ا ا ای ا ر روی در
ر ه ی در ا .ه س (5 1 ) . اول وع
اری ار ه left ،ا ره ی ز در ، و right ا ره ی ز ده ا دارای data ای
. را در
.(7 ) در ا ای ای وع د .ا ا م و را ا ر
ص در آ ر اری ا .در ا رت ار 0 را دا 8 ) و .(9 ا ر
. ا
ی ا دو را د و د ط . ار ی از د
ر ای ان دا .(14 11 ) از ا را را روی آ ا ل و
. ده ا ار رد ز و ا
ر ده ا و ا ا ی ز ه ا ( دن ) در وا د دو آ
. ز د .ا در آن ا م
د ار از د (/ ، ،- ،+ ) .ا ار ر ر ز در وار در ز
و آ ه را ا ا ز ز در و دا .در ا رت
15و .(16 د) ا ل ای روی آ
ی lambda ا در د ط ده ه ا .ار ی ا ق از د در 11 در
را و د دو را ا را د .ا ا در وا ا ن
.
و د ارد .در ای ا ا در ده از ط ی زی ا ی ،د رد ده از ا ا
ا د ا در ی ی وا ا ر
د . یا د
را ار ع ۳.۹
ار ع را دارد . .گF ی آن 2 ار ع دودو در
و ار ع ای ی وع . روش ی ارا راه را روش
. آ ار
در ، در ا .ا وه ای ده از ا ا ز راه را ده زی ا ا ر ا
ر از ر ن گ (leaf) ا ار ع آن ل آن ا . ب ار ع ه را
را ب ؟ آ ار ع ار ع ای از ا ر در ر ده ا ؟ و ا
در آن ار دارد و دا آن را و را در
د؟ ت در آن ار ار ع گ در
از .ا در ی ز ل دن در در ار ا ا وا
ت د ری ده د .ا در ط ب.م.م (gcd) از ا روش ا ز از
د . و در ه ر ا م ه از ز در د دا ن از
.ا در ه ی ر ا م ت در راه ای ر ن ده زی
و را ار ع گ در ز در ی ه ر را ا س ار ع ان
ا ز در ار ع آ در در ر ا . ار ع ز در ون ر از آورد؟ آن
در آن 0ا . ار ع ، ه
و ای ز در و را را ت ز در در ه ر ای
ا رو از ر در ، د .ا ای ز ار ع گ در در ر وا آن ا
ای د و ت ای ز از ز در ، ا ا ز در ر .ز
را ت ای ز در ی و را ر ، را زد . ز در
د .
، در دارای n ه ه . رود و ه را ر از از ر ا
. ا ا ر )O(n
. ر در لا ا ا ر را روی وا در
ن ا ر آن را ری ا و ای وا ر ه (Node) ا وع ده زی ا ر .
.(1 ) ا ای در .م و را ا ر ز وع آور .
،ا ط ه ا ا ز دا 9 ) و .(10 ،ار -1 را ر ز در Null
ر آ ه ر ز . Null ا ر در ا ا ا ا د و آن ر
دا 11 ) و و در آن را ار ع گ در ا ز در 0 در گ ا .در ا رت
.(12
ای گ ار ع ا در .دارد ای ز دی ز و ا ده (14 و 13 ) ی دو
. را ز ی ا ا . و را در ز
را و ا ا ی وا ، ا گ ار ع وا ر ا
. دا
ار ر در . را و در ز ٓا ر ز ا ا از ا
در آن ا در در ز در گ ار ع ان را ( ار ر ی )
.د
1. import sys
2. class Node:
3. def __init__(self, value):
4. self.value = value
5. self.right = None
6. self.left = None
7.
8. def findMinLeaf(root):
9. if not root:
10. return -1
11. if not root.left and not root.right:
12. return 0
13. return min(findMinLeaf(root.left) if root.left\
14. else sys.maxint,
15. findMinLeaf(root.right) if root.right\
16. else sys.maxint) + 1
ار را وی ، دار را آن زی ده ا و ا د ه را ی روش ا
!ا داد
ری از د و در ی م ول در زی (Hashtable) ن داده د
ا س م و اری ا ان را در ا ا ر د دارد .
آن رت زوج و راه ا . ی ن د ، آن د
ی را ن داده د ( ، ) م اری د .در ن داده ،ار( در ا )
داده ا ر را ون ی د د دا .ا ) ار( آن را
د . ،ری ا م
. -ار ای زوج ی ر ذ ه و ز ی رت ن داده د
(key) ت ا و ار را آن د .ای ز ی ای ذ ه زوج در د
ن ی در ه ر د
h = {} ی د
h = {key1: value1, key2: value2, key3: value3} ادی زوج ی اه د
-ار ) ل ای زوج(
(Heap) در.۱۱
ن ) (Heap در ۱.۱۱در
و ه ار در دودو ا ا دو ع دارد .در ن داده در
در دودو ا ار ه ر در ا . ه ر از ه ی ز
ز ص ز ن داده ر د ی ز دی دارد . ر از ه ی ز ر ا .ا
آن ا K از ی از ا داده ه ا ا -k :
. را ا ای دارد.
آن ا ا ز ا -3 [1 ,3 ,4 ,2 ,6 ,5] را ل وع . :
1 دارد .ار 2 در ا [1 ,2 ,3 ,4 ,5 ,6] ه آن در از
از 3 ی ز ، دن ا .رت د ای 3 ار در ا در
ارد .
ده د .ا رو ا زی ان از ا ر ی دن ا ا ای
ی آن را ا ان ا ا O(n*log(n)) دار .ا
د .
ل زی ز n ،ر در k از ی در در وا ا د
د .ا O(n*k*log(k)) ا ر . را 2k+1ا
آن دار . دش و k ، دن k+1 ز ای
اول دن k+1 ار د ز اری در ا ای
در زی آ در ا اول در ا k+1 -k .ا ر
د . ار
ار اری در ای .ا در ن-k آن ا
را را اه دش اول از :در وا k ا ر را ار د
. ))O(n*k*log(k زی ا ا ر د. ار ا در ار در
ل ا روش آن ا ر k .ا ا ا ا ا ا ا ا ر
آن ا ه ف د و اول از ر . در را از
زی آن .ا ن ری ا دار k ا ر ز دا د .
. ا در ا در
ی در ر در دا ز . اول k+1 ای ا ر ا ا در
k+1 در ی ار .در آور و آن در درج د را ا
دو ره در ر ار د .ا ار .ا ر در وز د و درج را در در
را آ در k+1 و ا ودن دا ار د . ا ار در
د . ادا ر ن ا ی
ا م د ،و از و ا ازه k ا O(log(k)) در از آ ای درج
. ا ا ر O(n*log(k)) درج و از آن ف د ،آ ه ر در
د . ا زی از آ ه ا ا ر از n ر k
ز در .ا ا ا آن را روی ل ا ر د و در ه از ای ا
ه ا . ن داده
ار دادن ه را و ^د ل را در ای درج در ورودی .ا ا ر روی ا ای د
د . ن را ر د و ن . ز آن
. ن ا ر ا دن ا ا روی ل از در در
وارد زم ا را در ای ا د در .ا ا ژو وع ده زی ا ر
.(3 ) در ا ای را ی را .(1 )
k ا ازه k در وی در ا ا ر ا د .(4 ) اری در ای
دار و در را از آن در ار ر در .(6 5 ) ی ا د
ط 10 و11 درج ه ا را در آن درج) ی در در ار .آ ه i ام
ن را در ی در د در و .(12 ) ز ی ( .آ ه اغ
ه ا .
1. from heapq import heappush, heappop
2.
3. def sort_k_unsorted_array(arr, k):
4. knext = []
5. for _ in range(min(k+1, len(arr))):
6. heappush(knext, arr[_])
7. i = 0
8. while knext:
9. arr[i] = heappop(knext)
10. if i < len(arr)-k-1:
11. heappush(knext, arr[i + k + 1])
12. i += 1
13. return arr
ه را ی ۳.۱۱
از در ن دودو ا . ر در -- ا درژد وزن در ( ع ی دودو ) ا در
ا رت د در آن ار ا در آن ا د در ا و
.ا و م د در ز در را آن ر از آن در ز در ه از آن
را رت در و ه ای را ا ن . ان ل ان ار در
در ی ای در د ا د .ا O(log n)
.
ی اد .۲.۱۲
از آن را اد و ای از ا اد در ای :
دا .
11 ,7 ,3 ,5] آن را در درک ده ا .ض را ل وع :
ی از 2 . از آن د 2 و 3 از او 4 ار دار و [4 ,2 ,را دار .دو
[2 ,0 ,3 ,2 ,0 ,0] را .ا و ار ،3 ،7 و 5 از 11 از آن
دا . ان اب
را درک و ن د (brute force) وع ی ارا ا ر را از روش
. ده ای راه ا ا
آن را آ م و ای وع از ی در روش
ر .ا را از آن ی در اد .از ر ه ر
رود و و اغ د ار در از دو ی راه
ا ا ر ) رد . از آن را اد را ا ی درو از آن
. O(n^2
درو ا ا ا ر دن ر ده ا ا د ا ر ا . ده زی ا ا ر
رد . را از اد را آ
از 4 را ا ا و د ا .ض در ل د ا از ا ا
ی ر وی 4 او ا رت [2 ,3 ,5 ,7 ,11] ار د .آ ه ا و در
آن 2 ا 5 ر از ،4 از آن را ن د .در ل او اد
از ر ر از ار ا ه او ی ای ه .در
ز ی دودو ، ده از ا دا از n ا .در وا ا ی
ا ا روش اد را از ا ا ا دا . ا log(n)
. از آن را
ده ا ی ا از آن را ا ا م آن ا ای ا ا
.
اد و از را ر ا ا ای ا ا راه
ه را رت د از .ا ر ه ف آن را از از
از ا اد ر از آن د . د ل او ا دا و ا در آن
ه ف . را از از ا ا ر آن ا ر . آن را
. آن )O(n دارد و از ف
.در ا رت ی از را ،آن را از را آن ا ی دل ا ه ا
ه را در از را ف ه ، و ف زی
.ا ر د ای آن ا ا و در ا ا .ا درج
) O(nدارد . ز د ف از درج در
ن داده ای را د ده از ای در ذ ای ا روش ارد ا دوم و روش ا
از ر درج در آن ن ا را د و ه در ی ا ن
ه ا ا وت درج .در ن دادهِ د َر ا .ا درج در
د . )) O(log(nا م آن و ف
د ان اد . در د ان ا د دارد و آن ا ا در
د . از آن در را ون در از
د . ا آن را ا ا ها ی در . ن
ز دارد آن در ا در ا ر را را ؟ ی در در ا د ا
را آ ن . ای ا ر ا ه ی در ا از ا رش اد
را ر ه (counter) ار و آن اد ه ی ز در آن ه را در د دارد .ا ا
را از [4 ,2 ,11 ,7 ,3 ,5] ض ا ای را C ن د .ان ل در ا
ا ا : درج در در را
دودو در ا ی ا ای ا ر آن در در ا ه و د ای از
از ار اد ده ا .ای "c:" ط ر ه را د در ا
ه در .ای ا ر ع ر ه "c:" را روش و ار داده ه در را
ز در را ه ( از آن را رد ) ا اد ر ن
از 11 اد .ان ل ای ع ا ار ر ه آن ه وه را
. 5 ا د ) (3+1و ) (0+1را
.ا را ف O(log(n)) از ا اد ده از ا ا
او ا ای ،ر ا ی دودو وز در در د ا د را در ز ن درج
دا . ا د
در اد .ای رش وع را آن ا از ا ر ا
ا ا از را ا . .ا در در ا ا ده از در ا را
را در در درج و د د ا . ده از در از آن را ا اد
ی در اد ای از ه را وز ر ه اد ط
. آ ده
. ا ا آن را روی ل ورودی ا ر از در ای ا
ل ورودی ای در وز ر رو
. در د ر ا ر در د ن ل
.ا رت ر ه در ه در رو ز اری در ر د
ه ار وی آن ه در در ار ر ه را در ز ن درج
ط د اری ار او 1 د .ا ر ه ه وا ا ا د .در
. در آ ا ر اری را . ل د
ه د در را از در ی ز و ورودی ا [4 ,2 ,11 ,1 ,5 ,5] ا .د ض
د . ن
ی ا ا ا . ی ورودی ار ا ل ق ن د ا
رو . اغ ده زی ا ر ه از ا ، ا ر در د ن
م leq_counter ای دا . ا را در ا ا ه از در
ط .(1-7 ا ) در آن از آن در وی رش
. ی دل ' 'c:در
را ان .(8 ) ا ی را
ا .(13 ) ا ر را ر در را ا د ه ا س آ دا 9 ) و .(10
0 ا ( و آن ا ) اد را ای آ ا د ا م د
ار د او .(14 ) در را آ وع . از ت را
( ا ) وع و آ ار از
را در در و ار (27 20 ) وع از ر در ی در ا در ) .(16
ا c_node ا ا ر در .ای ا ر ن ا ر ار ر ه ه را وز
.(17 ) ا دو ا ره در ا p_node ا ا ار ل (None) دارد ا ره و
ای رش اد . i ام وز ای درج م
را .(18 ) i ام ا آن را در در درج ار او 0 در از
. ر ه ر ه ه را ا ار ه
c_node ا p_node دار ا ار c_node را درون
i ام را ار .(21 ) i ام را از د درج ی ل و در
c_node درج آن در از c_node i ام .در ر c_node
) آن c_node را وا ا و ط ا .
.ا را c_node درج آن در i ام ر از c_node .(24 22در ر
ا اد آ ) ار و i ام c_node از م ا ا
ط .(27 25 د) رد ا ی را اد counter (leq_counter
ار ا . را p_node i ام در در درج درو از ا ی
اد ط .(32 29 ) را ا ه درج i ام ار p_node آن را در
.(34 د) resار از آن در
1. class Node(object):
2. def __init__(self, value):
3. self.value = value
4. self.left = None
5. self.right = None
6. self.leq_counter = 1
7.
8. def countSmaller(nums):
9. if nums == []:
10. return []
11.
12. len_nums = len(nums)
13. root = Node(nums[len_nums-1])
14. res = [0] * len_nums
15.
16. for i in range(len_nums-2, -1, -1):
17. i_val, c_node, p_node = nums[i], root, None
18. counter = 0
19.
20. while c_node:
21. p_node = c_node
22. if i_val<=c_node.value:
23. c_node.leq_counter += 1
24. c_node = c_node.left
25. elif c_node.value<i_val:
26. counter += c_node.leq_counter
27. c_node = c_node.right
28.
29. if p_node.value<i_val:
30. p_node.right = Node(i_val)
31. elif i_val<p_node.value:
32. p_node.left = Node(i_val)
33.
34. res[i] = counter
35.
36. return res
O(n*log(n)) ا ر ا ، ا ز در در log(n) ا i ای ا
.
زه د در ع ۲.۱۲
ع م د درون در L ای :در و دو د L و (L<=R ) R داده ه ا .
. رت و د( را د در دا و)R
آن را ب درک ده ا .ض در ز و د L=19 :ر را ل وع
ه ا . و R=60داده
ان ورودی در ای از
ن داده ده زی . از ن داده ده از ،ا ا ا ر را ان رت ز
ده د .ز ا ا دا ا د ی در زه ای د ل دن ر ز در
د . ر را ا م
1. from collections import deque
2. def rangeSumDrajd(root, L, R):
3. s = 0
4. queue = deque([root])
5. while queue:
6. c = queue.popleft()
7. if c:
8. if R<c.val:
9. queue.append(c.left)
10. elif c.val<L:
11. queue.append(c.right)
12. else:
13. s += c.val
14. queue.append(c.left)
15. queue.append(c.right)
16. return s
در ه و را ه در ار ع ا ازه ا ا ، ق ا ر دو در
)) ا ر ا ، در د زه در د R و L ر در ، L R زه
. O(n) در. O(log(n) + (R-L
.۱۳اف
۱.۱۳اف
ر آ .داده در ری از ر ا در ن داده اف
ده ا و ده در ر ا دار .ان ل ذا از
ا از د ل دن داده رت اف ر اف دارد .در د
ا ا م وژه . ده ا ای ا ر ی اف
.ا ر ان از را ان رت اف در ا ٓ وژه اه وا
وژه ،و ز ن ه ری از ا ت در رد وژه ، ا ر ی اف ای
اری اف در
ا . ده از ده د .روش اول ا اف را دو روش ه ان در
.د اری در ی از د ان ز را اف
g = {“Golestan”: [“Semnan”],
“Semnan”: [“Tehran”, “Esfahan”],
“Tehran”: [“Semnan”],
“Esfahan”: [“Semnan”, “Yazd”, “Fars”],
“Fars”: [“Yazd”, “Esfahan”],
“Yazd”: [“Esfahan”, “Fars”]
}
را روش دو ا اف زی ده د و ه ر ع ه و ت ا ع وت ر
. ب ا
، ف . ا ه داده ت از و ، ن ، وع :
ض از ف در ود ا ا ات از ای د از ده ا ن وع
ا ل ان . ا ده درک در را آ ز ل را ر ل :
. د ه tell ->toll-> tool-> cool-> cook->book آ ه د، cage
ی د ای ح ا : ا ار روی ا در رد راه ا از ا
ور . tollو toolدو . آ را ' ور' وت ف در
ت ور ر ی ا .در ا روش م د ی آن روش او ا ر
د . ا ،و ا ی د ت ور از وع آ ز د ، از د ای
آ ور ر ت( را ) w اد از د در وا در
ت ور از ا . ت L ،ا ل د ت L ؟ ا ل
ی را آ و ) :ا( آن دارد آن را ا ا ا ر دو
ت را آ ر ب ، و) اا( ا آ را ا ا ،ا را
.ا ر ب را ا ت ور ی در د ت آن ر ه ای در د
ر . اری
در ل را ر ورت ، ی د ل دن ا ا ر ن ای وا
.
ت ه را ز و آ ار ط ' ور دن' ن داده اف را ا در آن
. در ز ن اف ،د اول ح ارا ه در وا ا اف را رت ی ا ر
را و را از وع ن دن ا ا ر آن ا ا ا م ه ای
داد .
، ی را ر ؟ ی اف ا روش ا ب ،آ
و .ا ن و ر م ا ا ا ن را د در ی
ا و زی را ن ر ا او ری در
اول ا ر اف ای ی ده از ن و د ارد .ا ا
ا .ای ر ا ور ی ای د ط ا اد دوم ا ر
ده از را رت اف ق ذ ه . ا و ت را ا ا ا ر
L ا . w^2 د .ا د ا ا ای
.در اف ل ق ا ر ا ور را ت ، ا ی آ ر ا
و ا از از ه ( دا ) ز ا ا اف ا اد ن د :
ای ظ ت cage, wage, rage و د ارد .ا د ی وع .از وع آ
غ و .ا اف ا ا را اف ورت و د ارد .ا از دن آ در
ا س ا ا ه . ده اف ا غ و غ از روش د ی ای ای
دن ف ا از L ات را ان ور در د ورت ذ ر .
ت دن ف اول ،و ت … ،aell، bell, cell و ه ا د د . وف در
ا د ا . tell ا د دوم دن در … ، tall، tbll، tcll
ده از ا روش در ی ،آن را د ن ا د . ا ت داده ه ای ا ی ر
ت داده ه و د ار .ای ا ت ا د ه ا ا در آن ا
ت داده ه آ آن در ، ا ا ر ا د ه ای ده از از ا
ه در د آ ا (set) ن داده ؟ ب آن ا
. از آ ور L*26 ،ای ده ا ی ت و ا از روش ا د
ا w*L*26 ا د ای د رگ L و W ه دار ، w
دازش ت از اف ا ی ا .ا ر ر ی ا ر
ل W 2ا . ) O(W * L + W 2 دارای ده در ه ا
ی ت و روش ا د در ی دازش و روش ا
از ،آ ه ا ر از L ر W و L دارد .ا W ی وا را
و ر ت ا دا .از ف د ،ا در ده دازش ا
ر اف ورت را ز و در ر ی د از ،آ ه ف ی داده وع و ن
ا . او ا ام ا ر ای ر ه در ن ار و ا ا ارد را
ل . در ا ا ی ت و ه از ا ر ا د ض در ا
وع ده زی در ر . رت ا ا ر روی داده ورودی
. ا ر
در ن اه را ه داده ت .(1 ) در ی را ای م
در ا ر ه ل در م ر ه .(2 ) ر (set) داده ن
ار در .(4 ) ز آن در وع دادن ار را .(3 )
ازای .(6 ) در دادن ار ای .(5 ) رو ٓا ر ن
ا از ت م رت ا در .(9 و 8 ) دا آن ر ن ا اد ان را
ا .(18 ) در ان را و (17 ) ا ا وا را ر ه ، ا
1. def findShortestPath(beginWord, endWord, wordList):
2. wordList = set(wordList + [endWord])
3. layer_count = 0
4. layer = [beginWord]
5. while layer:
6. new_layer = []
7. for w in layer:
8. if w == endWord:
9. return layer_count
10. else:
11. for i in range(len(w)):
12. for c in "abcdefghijklmnopqrstuvwxyz":
13. n_word = "{}{}{}".format(w[:i], c, w[i+1:])
14. if n_word in wordList:
15. new_layer.append(n_word)
16. wordList.remove(n_word)
17. layer_count += 1
18. layer = new_layer
19. return -1
در ول ۳.۱۳
ی در ول آ ی دار .ا ر :ول از وف و
، .دو ف ور ا ، را ، ای وف آن در ول ور و د دارد
. ده از ول دو ر ا ف در ا از .
ی Faces و ول ز را دا .ا آن را ل وع :ای درک
وف ور Faces را از ر ا دا ز ا ان ،آ ه ا ر ار True را
. ها ( ر ر ول )
د ل آن ای تو از ول
ت ا د ی ا ر را ح . ای ا ی ا ا ا ر
آ ه ار True را ه ت ی ن از وف ور را ز .ا
ول وع و 4 از وف ور در ول از ت م دا .ای
و . ی از ول .در ،را ،و ،
ا م د ل د .ا ر را ز ای ا م د ،را و
. ی آن را از ا د . ی دل ل ه ا د
. ا رت ی ا د ه وف ر ا روش را ا
را ادا ت از آن ا د ا د . ی اول را ف اول
راه ا روش ار .ا ی ا ر راه د .
ار ط ی ول و اف ا .در وا ول در را درک
. آن ،و ، را ، در ه و ه در اف ا
.ای ده زی ز در اف از ه آن ی ه در وا ا ا ر
ن از ول ای .ره اف م ت آ روش ه و ا
. ده ا در اف ه
.(1 ) را ی . ا ا م و را ا وع ده زی
ده 2 ) و .(3 ار ا ا را از آ ا و ن ول را در اد
ا ان ی ار .(4 ) ی را در ل د
ی ا ار ز 5 ) و .(6 در ادا ده زی ی د او False ای
ل دن .ای ی د ف در ا د ده ول True از ا
دارای دو .(7 ) ده ا از از را ، ، ،و
ن د . ور و دو در ن را ای ر ن در ان ا او
( seq ی) از ا ادا (i , j) ول وع dfs در وا از دا
ار در 28 25 . در دو ی دا ا اغ ) .(9 از
.ای ی را از ن آ ان و ا را
ادا د .ا دا را ا ا .(27 ) ل ا ا ر دا
ن وف ول در ه ا و ی ا ی ا و د را ا ا ز
را (i, j) ی ا .ا د ر ف در ده ه وف
را ادا د 22 ) و ا .در ر ا ی seq در
ی در ول ا ی ف در و ا آ .(23در ر ا
ا (i, j) را ن اری ه ی د ا 11 ) و .(12 ا ا ی
در ی ای از .(13 ) ده از آن دو ره ا در ادا
رج ا ر آ ه .(16 و 15 ) ز را ی ی ا (14 ) ار
رت در .(18 و 17 ) ه ده ا ا در رد و ده از
ر در .(19 ) ا ا ز رت را ا ن
(i, j) ن د ٓا ر در .(20 ) د ٓا
.(22 ) ده ت از آن ا ای ی ا false را
1. def find(self, board, word):
2. row_len = len(board)
3. col_len = len(board[0])
4. word_len = len(word)
5. checked = [[False for _ in range(col_len)] for _ in \
6. range(row_len)]
7. directions = [[0,1], [0, -1], [-1, 0], [1, 0]]
8.
9. def dfs(i, j, seq):
10. if board[i][j] == word[seq]:
11. if seq+1 == word_len:
12. return True
13. checked[i][j] = True
14. for d in directions:
15. ni = i+d[0]
16. nj = j+d[1]
17. if 0<=ni<row_len and 0<=nj<col_len\
18. and (not checked[ni][nj]):
19. if dfs(ni, nj, seq+1):
20. return True
21.
22. checked[i][j] = False
23. return False
24.
25. for i in range(row_len):
26. for j in range(col_len):
27. if dfs(i, j, 0):
28. return True
20. return False
ن در ره
،آ م د از ی د ر در ه رک ا و در ا دا م ر د رغ ا د
ی ا ان را دارا . در دا م در ر را دارد .وه ا و
و ا رک ا ه م ر ری در دا رس و از دا ه ر ر ی اه رغ ا د
را دارد . آ ه ن ن در دوره ی دا ای دا آ زان ا اد ی در ن ر از در
ب : ا ن در ره ا
ز ن . ای ا ه رو آ ده , و ب ی آ زش از ا ب ی را '
ب ا ر رو ا ت ای ن دا روی ور ا ای آ ع ا ت و د ن
ازم ا دو ز ن آ ده ی د ب رو م و ما از ا م ه. ا
ای ار و ا ت ب رو ب او ه د! ا ه
'. ب ا ا ب ی ت ای دار ن
ه رک دا ،دا ی م ا ن