Räkna delarrayer med en målsumma
Kombinera prefixsummor med en hash-tabell
Räkna delarrayer med en målsumma är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.
En svårare fråga
Nu kommer twisten: räkna hur många delarrayer som har summan k. Att kontrollera varje par är långsamt, men prefixsummor tillsammans med en hash map löser det. 🎯
Formulera om med prefixsummor
Summan av en delarray är prefix[r + 1] minus prefix[l]. En summa på k innebär alltså att två prefixvärden skiljer sig exakt med k.
Den avgörande omformningen
Om det aktuella prefixet är P behöver Ni ett tidigare prefix som är lika med P minus k. Den här omformningen är hela tricket.
need = current_prefix - kRäkna, sök inte
I stället för att gå bakåt vid varje steg håller Ni reda på hur ofta varje prefixvärde har förekommit. En löpande räkning ger svaret i O(1).
Använd en frekvenskarta
En dictionary mappar varje prefixvärde till hur många gånger Ni har sett det. Den här kartan gör uppslagningen till en omedelbar räkning.
from collections import defaultdict
seen = defaultdict(int)Initiera det tomma prefixet
Innan loopen registrerar Ni att prefix 0 har förekommit en gång. Den här initieringen gör att delarrayer som börjar vid index 0 räknas med.
seen[0] = 1Loopen i ett enda pass
För varje element uppdaterar Ni det löpande prefixet, lägger till antalet förekomster av det nödvändiga värdet och registrerar sedan det aktuella prefixet. Ett enda pass gör allt.
total += x
count += seen[total - k]
seen[total] += 1Varför ordningen spelar roll
Ni måste lägga till i svaret innan Ni registrerar det aktuella prefixet. Annars smyger ett intervall med längden noll in och räkningen blir fel.
Hastighetsvinsten
Varje element kräver konstant arbete, så hela räkningen körs i O(n). Det slår den brutala O(n²)-lösningen på stora indata.
Negativa tal går bra
Till skillnad från glidande fönster hanterar den här metoden negativa tal utan problem, eftersom prefixskillnaderna förblir giltiga oavsett tecken.
Ett klassiskt användningsfall
Det här mönstret löser det berömda problemet med delarray-summa lika med k och många förklädda varianter i tävlingsdomare.
Snabbkontroll
Det löpande prefixet är P och målet är k.
Sammanfattning
Ni kan räkna delarrayer med målsumman i O(n) med hjälp av prefixsummor och en frekvenskarta. Initiera prefix 0 och räkna sedan innan Ni registrerar. ✅
Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 90
- Lektioner
- 360
Vanliga frågor
Är lektionen ”Räkna delarrayer med en målsumma” gratis?
Ja – hela texten till ”Räkna delarrayer med en målsumma” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.
Vad lär jag mig i ”Räkna delarrayer med en målsumma”?
Kombinera prefixsummor med en hash-tabell Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?
Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Räkna delarrayer med en målsumma”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?
Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Bygg en prefixsumme-array
- Summera valfritt intervall med subtraktion
- Räkna delarrayer med en målsumma
- Differensarrayer för intervalluppdateringar