emrevarol.com Materials
A2SV
def solve(problem): understand(problem) manual_solve(example) design_algorithm() attack_own_idea() implement() test_comprehensively() simplify() return solution class Interview: def __init__(self): self.steps = 7 self.clarity = True self.speed = False # The Playbook for step in range(1, 8): execute(step) communicate(step) verify(step)

Hatua 7 za
Utatuzi Bora wa Matatizo

Mwongozo wa Mahojiano

A2SV - Emre Varol

Kwa Nini Mwongozo?

  • Mahojiano yanaleta shinikizo
  • Shinikizo huharibu mawazo yasiyo na mpangilio
  • Mwongozo unaleta uthabiti
  • Uthabiti unashinda fikra za mara kwa mara
Bila Mpangilio
↗ ↙ ↖ ↘
↓ ↑ → ←
↙ ↗ ↘ ↖
Yenye Mpangilio
1. Elewa 2. Kwa Mkono 3. Buni 4. Shambulia 5. Andika Msimbo 6. Jaribu 7. Safisha

Si kutatua matatizo tu -
bali kuyatatua kwa uhakika chini ya shinikizo

Uamuzi bora
Makosa machache yanayoepukika
Mawasiliano safi zaidi
Ushindi zaidi wa mahojiano

Hatua 7

1
Elewa tatizo
2
Tatua tatizo kwa mkono
3
Buni wazo la suluhisho
4
Shambulia wazo lako mwenyewe
5
Tekeleza
6
Jaribu kwa kina
7
Rahisisha na safisha

Kosa Kubwa Zaidi la Mgombea

Kuanza kuandika msimbo mapema sana

Matokeo

  • Uelewa mbaya
  • Algorithm mbaya
  • Complexity mbaya
  • Muda uliopotea
01
Elewa Tatizo
  • Soma polepole
  • Fikiria kila sentensi
  • Toa vikwazo
  • Eleza kwa maneno yako mwenyewe

Hatua 1: Nzuri vs Mbaya

Mbaya

  • Anasoma haraka tatizo
  • Anadhania kinachoulizwa
  • Anaanza kuandika msimbo baada ya kusoma mara moja

Nzuri

  • Anaeleza tena kuingiza na kutoa
  • Anatambua vikwazo
  • Anathibitisha nini hasa kinapaswa kurudishwa

Mfano wa Tatizo: Two Sum

Ukipewa safu ya nambari kamili nums na nambari kamili target, rudisha fahirisi za nambari mbili ambazo jumla yake ni sawa na target. Dhani jibu moja halali lipo, na kipengele kimoja hakiwezi kutumika mara mbili.
target = 9
2
0
7
1
11
2
15
3
2 + 7 = 9 → return [0, 1]

Hatua 1 Nzuri kwenye Two Sum

Mgombea anasema:

  • Kuingiza: safu + target
  • Kutoa: fahirisi mbili
  • Tunarudisha nafasi, si thamani
  • Jibu moja tu lipo
  • Haiwezekani kutumia kipengele kimoja mara mbili
Hakuna utata uliobaki.
Vikwazo muhimu vimeshikwa.

Hatua 1 Mbaya kwenye Two Sum

Tabia Mbaya ya Mgombea

  • "Ninahitaji tu nambari mbili zinazojumlika"
  • Anasahau fahirisi vs thamani
  • Anapuuza kikwazo cha jibu-moja-tu
  • Anapuuza kanuni ya kutotumia-kipengele-kimoja

Msimbo unaoonekana sahihi bado unaweza kuwa mbaya.

02
Tatua Tatizo kwa Mkono
"Kama huwezi kufanya kwa mkono, huwezi kukiotomatisha."
  • Anza na mfano
  • Fuatilia maamuzi yako
  • Tafuta marudio
  • Toa muundo

Hatua 2: Nzuri vs Mbaya

Mbaya

  • Anaruka kutoka kusoma hadi kuandika msimbo
  • Anasema "Nadhani najua mbinu"
  • Hakagui mfano mdogo kamwe

Nzuri

  • Anafanya kazi na mfano wa kuingiza
  • Anaona hatua inayorudiwa
  • Anatoa habari inayosaidia

Mwongozo wa Mkono: Two Sum

nums = [2, 7, 11, 15], target = 9
2
0
Inahitaji 7
7
1
Jibu: [0, 1]
Muundo uliogunduliwa: Kwa kila nambari, ninahitaji kamilisho lake.

"Nini ninachokagua mara kwa mara kwa mkono?"

Kwa Two Sum: "Je, nambari inayohitajika tayari ipo?"

hash map utafutaji wa haraka O(n) solution
03
Buni Wazo la Suluhisho
  • Jumisha mchakato wako wa mkono
  • Chagua muundo sahihi wa data
  • Kagua complexity ya muda
  • Kagua complexity ya nafasi
  • Jaza mapengo ya mantiki kabla ya kuandika msimbo

Lango la Complexity

Kabla ya kuandika msimbo, uliza:

  • Je, brute force inatosha?
  • Vikwazo vinaruhusu nini?
  • Je, kazi za msaada zinaficha gharama ya ziada?
  • Nina uhakika hii inaweza kupita?

Hakuna msimbo kabla ya lango hili.

Hatua 3: Nzuri vs Mbaya

Mbaya O(n²)

  • "Nitaandika msimbo tu na kuona"
  • Hakuna majadiliano ya complexity
  • Mantiki isiyoeleweka
  • Muundo wa data umechaguliwa bila mpangilio

Nzuri O(n)

  • Anaeleza brute force kwanza
  • Anaboresha kwa makusudi
  • Anachagua muundo kulingana na hitaji
  • Anaeleza kwa nini inafaa vikwazo

Two Sum: Muundo Mzuri

Brute Force

Jaribu kila jozi

O(n²)

Bora Zaidi

Hifadhi nambari zilizoonwa kwenye dict, kagua kamilisho

O(n)

uboreshaji

Python: Wazo Kuu la Two Sum

def two_sum(nums, target): seen = {} for i, num in enumerate(nums): need = target - num if need in seen: return [seen[need], i] seen[num] = i
Fupi
Inasomeka
Muundo unalingana na hitaji
Complexity ni wazi
04
Shambulia Wazo Lako Mwenyewe
"Cheza wakili wa shetani. Fikiria adui yako mbaya zaidi alitoa wazo hili. Ungefanya bidii yako ili kulibomoa."
  • Cheza wakili wa shetani na suluhisho lako
  • Jaribu kulivunja kwa kuingiza kwa uadui
  • Pata madhani yaliyofichwa
  • Tafuta hali za ukingoni
  • Kataa suluhisho lako kabla ya mhojaji kufanya hivyo

Hatua 4: Nzuri vs Mbaya

Mbaya

  • "Hii inapaswa kufanya kazi"
  • Hakuna mawazo ya hali za ukingoni
  • Ameshikamana kihisia na wazo la kwanza

Nzuri

  • Anatafuta kushindwa kwa bidii
  • Anakagua madhani
  • Anauliza ni kuingiza gani kungevunja mantiki
  • Anacheza wakili wa shetani dhidi ya suluhisho lake

Maswali ya Hali za Ukingoni

Mipaka ya Kuingiza

  • Kuingiza tupu
  • Kipengele kimoja
  • Ukubwa wa juu

Hali za Thamani

  • Nakala rudufu
  • Hasi
  • Sifuri

Ukaguzi wa Madhani

  • Iliyopangwa vs isiyopangwa
  • Ya kipekee vs iliyorudiwa
  • Overflow

Mfano wa Dhana Iliyofichwa

Dhana mbaya: "Kuingiza kumepangwa."

  • Je, hiyo ilihakikishwa?

Kama sivyo, wazo la viashiria-viwili linaweza kushindwa kabisa.

Iliyopangwa
1
2
3
4
5
Isiyopangwa
3
1
4
2
5
05
Tekeleza
"Sasa andika msimbo. Lakini andika kwa nidhamu:"
  • Andika kwa vitalu
  • Tumia majina wazi
  • Tumia kazi za msaada inapofaa
  • Eleza kila kitalu kinachofanya nini

Hatua 5: Nzuri vs Mbaya

Mbaya

  • Kitalu kikubwa cha msimbo
  • Majina mabaya ya vigezo
  • Hakuna muundo
  • Ngumu kueleza

Nzuri

  • Majina safi
  • Kazi za msaada zinapohitajika
  • Utekelezaji wa kitalu kwa kitalu
  • Rahisi kueleza

Utekelezaji Mbaya

def f(a, t): d = {} for i in range(len(a)): x = t - a[i] if x in d: return [d[x], i] d[a[i]] = i
f?
a?
t?
d?
x?

Majina yasiyo wazi → ngumu zaidi kueleza → usomaji mdogo → rahisi zaidi kujichanganya

Utekelezaji Bora

def two_sum(nums, target): value_to_index = {} for index, num in enumerate(nums): needed = target - num if needed in value_to_index: return [value_to_index[needed], index] value_to_index[num] = index
two_sum ✓
value_to_index ✓
needed ✓
index, num ✓

Inasomeka → rafiki kwa mhojaji → rahisi kurekebisha → rahisi kuelezea

Muundo wa Kazi ya Msaada: Matatizo ya Gridi

Ukipewa gridi ya 2D, tembelea jirani halali kuhesabu au kusasisha matokeo.

def is_valid(row, col, rows, cols): return 0 <= row < rows and 0 <= col < cols
c

Muundo wa Vekta ya Mwelekeo

directions = [ (-1, 0), # up (1, 0), # down (0, -1), # left (0, 1), # right ]
c
  • Msimbo uliorudiwa kidogo
  • Makosa machache
  • Mantiki safi ya kupitia
06
Jaribu kwa Kina
"Kujaribu si hiari. Kujaribu ni sehemu ya suluhisho."
  • Hali ya mfano
  • Hali ya ukingoni
  • Hali ngumu
  • Hali ya mpaka

Hatua 6: Nzuri vs Mbaya

Mbaya - "Bila Mpangilio"

  • Anajaribu kuingiza mfano tu
  • Anajaribu thamani za nasibu
  • Anasimama baada ya mafanikio ya kwanza

Nzuri - "Kwa Makusudi"

  • Kila jaribio lina sababu
  • Inalenga madhani
  • Inashughulikia mipaka na nakala rudufu

Two Sum: Mifano ya Majaribio

[2, 7, 11, 15], target 9 hali ya msingi
[3, 3], target 6 thamani rudufu
[1, 2, 3, 4], target 7 jibu mwishoni
[5, 4], target 9 kuingiza ndogo sana
Je, mantiki bado inafanya kazi thamani ile ile inapoonekana mara mbili?

Wahojaji Wanachokiona katika Majaribio

Unapojaribu bila kuulizwa, unaonyesha:

Nidhamu
Umiliki
Ukomavu
Fikra za Uhandisi
07
Rahisisha na Safisha
"Mara msimbo unapofanya kazi:"
  • Boresha majina
  • Ondoa msongamano
  • Rahisisha mantiki
  • Ongeza maoni machache ikiwa yanasaidia

Hatua 7: Nzuri vs Mbaya

Mbaya

  • Anaacha majina yanayochanganya
  • Anabakisha msimbo uliokufa
  • Hafanyi mapitio ya mwisho

Nzuri

  • Anaondoa msongamano
  • Anaboresha uwazi
  • Anafanya maelezo ya mwisho kuwa rahisi

Kabla na Baada ya Majina

Kabla
mp = {}
Baada
value_to_index = {}

Uwazi ni sehemu ya usahihi.

Kanuni ya Nukta 3

3
Wazo ni nini
Kwa nini linafanya kazi
Kwa nini ni bora kutosha

Ukihitaji nukta 10, bado hujaelewa vizuri.

Ratiba ya Mahojiano ya Dakika 40

0-5 min
5-10
10-18
18-30
30-36
36-40
Elewa
& eleza
Tatua
kwa mkono
Buni &
complexity
Tekeleza
Jaribu
Safisha
& fupisha

Kanuni ya Kubadilisha

Ukitumia dakika 5-7 na:

  • Huwezi kuhalalisha complexity
  • Unavunjika kwenye hali za ukingoni
  • Huwezi kueleza kwa nini inafanya kazi
PIVOT
Muundo mpya wa data
Mtazamo mpya
Toleo rahisi kwanza
Uliza kidokezo mahususi

Ombi Zuri la Kidokezo vs Ombi Baya

Bad
"Nimekwama."
Bora Zaidi
"Nina suluhisho la O(n²), lakini nadhani vikwazo vinahitaji kitu haraka zaidi. Je, ninapaswa kufikiria kuhusu hashing au kupanga?"

Kwa nini ni bora: inaonyesha maendeleo, inaonyesha ufahamu, inauliza swali mahususi.

Hati ya Mawasiliano Unayoweza Kutumia Tena

  • "Niruhusu nieleze tena tatizo."
  • "Nitaanza na mfano mdogo."
  • "Brute force ni O(n²), lakini nadhani tunaweza kufanya vizuri zaidi."
  • "Nitatekeleza hii katika sehemu mbili."
  • "Sasa nitajaribu hali za ukingoni."
II
Mwongozo Kamili: Image Smoother
"Tutatumia hatua zote 7 kwa tatizo la pili."

Tatizo: Image Smoother

Umepewa gridi ya nambari kamili za 2D inayowakilisha thamani za pikseli za picha. Kwa kila seli, hesabu sakafu ya wastani wa seli jirani halali zinazozunguka, pamoja na seli yenyewe.
1
1
1
1
0
1
1
1
1

Seli ya katikati imeonyeshwa, jirani zake zimefunikwa

Hatua 1: Elewa - Image Smoother

  • Kuingiza: matrix ya nambari kamili m × n
  • Kutoa: matrix nyingine m × n
  • Tumia jirani halali tu (fahamu mipaka)
  • Jumuisha seli ya katikati yenyewe katika wastani
  • Wastani unatumia ugawaji wa sakafu
Kona: jirani 3 + yenyewe = 4
c
n
×
n
n
×
×
×
×
Katikati: jirani 8 + yenyewe = 9
n
n
n
n
c
n
n
n
n

Hatua 2: Tatua kwa Mkono - Image Smoother

Hesabu thamani laini kwa seli (0,0) kwa mkono:

Gridi ya kuingiza
1
1
1
1
0
1
1
1
1
Cell (0,0) = 1
Jirani halali:
(0,1) = 1
(1,0) = 1
(1,1) = 0
Sum = 1 + 1 + 1 + 0 = 3
Count = 4
floor(3/4) = 0
Muundo: kwa kila seli, kusanya jirani halali, jumla, gawanya kwa hesabu.

Hatua 3: Buni - Image Smoother

Maamuzi Muhimu

  • Tumia offsets 9 za mwelekeo (pamoja na katikati)
  • Tumia ukaguzi wa mipaka is_valid
  • Tenga matrix mpya ya matokeo
  • Pitia kila seli kwenye gridi

Complexity

  • Kila seli inakagua hadi jirani 9
  • Total: O(m × n × 9) = O(m × n)
  • Space: O(m × n) for output
c

Hatua 4: Shambulia - Image Smoother

Maswali ya Mpaka

  • Kona zina seli 4 tu (pamoja na yenyewe)
  • Kingo zina seli 6 tu
  • Je, gridi ya 1×1?

Maswali ya Thamani

  • Je, seli ya katikati imejumuishwa katika wastani?
  • Ugawaji wa sakafu, si kuzungusha
  • Thamani zote sawa → bila kubadilika?

Mitego ya Utekelezaji

  • Kubadilisha kuingiza mahali pake (kuharibu usomaji baadaye)
  • Kosa la moja katika ukaguzi wa mipaka
  • Ugawaji wa nambari kamili vs desimali
Ugunduzi muhimu: tunahitaji matrix tofauti ya matokeo kwa sababu kusoma na kuandika gridi ile ile kunaharibu matokeo.

Hatua 5: Tekeleza - Image Smoother (Maandalizi)

def image_smoother(img): rows, cols = len(img), len(img[0]) output = [[0] * cols for _ in range(rows)] neighbors = [ (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1), ]
-1,-1
-1,0
-1,1
0,-1
0,0
0,1
1,-1
1,0
1,1

Hatua 5: Tekeleza - Suluhisho Kamili

def image_smoother(img): rows, cols = len(img), len(img[0]) output = [[0] * cols for _ in range(rows)] neighbors = [ (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1), ] for row in range(rows): for col in range(cols): total = 0 count = 0 for dr, dc in neighbors: nr, nc = row + dr, col + dc if 0 <= nr < rows and 0 <= nc < cols: total += img[nr][nc] count += 1 output[row][col] = total // count return output

Hatua 6: Jaribu - Image Smoother

[[1,1,1],[1,0,1],[1,1,1]] hali ya mfano - seli ya katikati imezungukwa
[[5,5,5],[5,5,5],[5,5,5]] thamani zote sawa → matokeo hayabadiliki
[[7]] 1×1 grid → output is [[7]]
[[1,1,1],[1,0,1],[1,1,1]], cell (0,0) seli ya kona: (1+1+1+0)/4 = sakafu(3/4) = 0
Kila jaribio linalenga mpaka au dhana mahususi.

Hatua 7: Safisha - Image Smoother

Kabla ya Kusafisha

  • Jina la kigezo d kwa mwelekeo
  • Nambari za uchawi kama -1, 1 zimetawanyika
  • Hakuna maoni kwenye ukaguzi wa mipaka
  • Hatari ya kubadilisha mahali pake

Baada ya Kusafisha

  • neighbors inajieleza yenyewe
  • Offsets za mwelekeo zimekusanywa kwa macho
  • Matrix tofauti ya matokeo ni wazi
  • Msimbo unasomeka kama algorithm
Ukaguzi wa mwisho: Je, unaweza kueleza kila mstari kwa sentensi moja?

Image Smoother: Nzuri vs Mbaya

Mbaya

  • Anaanza kuandika msimbo wa vitanzi mara moja
  • Anasahau utengenezaji wa matokeo
  • Anasahau ukaguzi wa mipaka
  • Anarudia masharti 9 kwa mkono

Nzuri

  • Anatambua tatizo la jirani-za-gridi
  • Anatumia offsets za jirani
  • Anatenga matokeo kwanza
  • Anashughulikia mipaka kwa ujumla

Wagombea Hodari Wanachofanya

Wanasimama mwanzoni
Wanafikiria kabla ya kuandika msimbo
Wanapinga mawazo yao
Wanajaribu kwa makusudi
Wanawasiliana kwa uwazi
Wanatulia wanapokwama

Wagombea Dhaifu Wanachofanya

Wanakimbilia msimboni
Wanapuuza vikwazo
Wanatumaini wazo linafanya kazi
Wanaruka hali za ukingoni
Wanaogopa wanapokwama
Hawasafishi kamwe

Uwazi kwanza.

Usahihi pili.

Kasi tatu.

Kasi bila uwazi inatengeneza suluhisho mbaya.

Tatizo si tatizo. Tatizo ni mtazamo wako kuhusu tatizo. Unaelewa?
- Kapteni Jack Sparrow
1 / 56

Yaliyomo