hello-algo/en/index.html
2024-05-31 17:45:23 +08:00

1872 lines
No EOL
112 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1" name="viewport"/>
<meta content="Data Structures and Algorithms Crash Course with Animated Illustrations and Off-the-Shelf Code" name="description"/>
<meta content="krahets" name="author"/>
<link href="https://www.hello-algo.com/en/" rel="canonical"/>
<link href="assets/images/favicon.png" rel="icon"/>
<meta content="mkdocs-1.5.3, mkdocs-material-9.5.5" name="generator"/>
<title>
Hello Algo
</title>
<link href="assets/stylesheets/main.50c56a3b.min.css" rel="stylesheet"/>
<link href="assets/stylesheets/palette.06af60db.min.css" rel="stylesheet"/>
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback" rel="stylesheet"/>
<style>
:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}
</style>
<link href="stylesheets/extra.css" rel="stylesheet"/>
<script>
__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}
</script>
</head>
<body data-md-color-accent="teal" data-md-color-primary="white" data-md-color-scheme="default" dir="ltr" style="background-color: var(--md-body-bg-color);">
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
<label class="md-overlay" for="__drawer">
</label>
<div data-md-component="skip">
</div>
<div data-md-color-primary="black" data-md-color-scheme="slate" data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-color-primary="black" data-md-color-scheme="slate" data-md-component="header">
<nav aria-label="Header" class="md-header__inner md-grid">
<a aria-label="Hello Algo" class="md-header__button md-logo" data-md-component="logo" href="." title="Hello Algo">
<img alt="logo" src="assets/images/logo.svg"/>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z">
</path>
</svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Hello Algo
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Home
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input aria-label="Dark mode" class="md-option" data-md-color-accent="teal" data-md-color-media="" data-md-color-primary="white" data-md-color-scheme="default" id="__palette_0" name="__palette" type="radio"/>
<label class="md-header__button md-icon" for="__palette_1" hidden="" title="Dark mode">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07 19.07 3.5m-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13.51 1.67m-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87.4 1.31M19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35-2.53-2.2m4.33-2.7 1.15-2.77 2.2 2.54-3.35.23m1.15-4.96-1.14-2.78 3.34.24-2.2 2.54M9.63 18.93l2.77 1.15-2.53 2.19-.24-3.34Z">
</path>
</svg>
</label>
<input aria-label="Light mode" class="md-option" data-md-color-accent="teal" data-md-color-media="" data-md-color-primary="black" data-md-color-scheme="slate" id="__palette_1" name="__palette" type="radio"/>
<label class="md-header__button md-icon" for="__palette_0" hidden="" title="Light mode">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07 19.07 3.5m-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13.51 1.67m-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87.4 1.31M19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35-2.53-2.2m4.33-2.7 1.15-2.77 2.2 2.54-3.35.23m1.15-4.96-1.14-2.78 3.34.24-2.2 2.54M9.63 18.93l2.77 1.15-2.53 2.19-.24-3.34Z">
</path>
</svg>
</label>
</form>
<script>
var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}
</script>
<div class="md-header__option">
<div class="md-select">
<button aria-label="Select language" class="md-header__button md-icon">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m12.87 15.07-2.54-2.51.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04M18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12m-2.62 7 1.62-4.33L19.12 17h-3.24Z">
</path>
</svg>
</button>
<div class="md-select__inner">
<ul class="md-select__list">
<li class="md-select__item">
<a class="md-select__link" href="/" hreflang="zh">
简体中文
</a>
</li>
<li class="md-select__item">
<a class="md-select__link" href="/zh-hant/" hreflang="zh-Hant">
繁體中文
</a>
</li>
<li class="md-select__item">
<a class="md-select__link" href="/en/" hreflang="en">
English
</a>
</li>
</ul>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z" fill="var(--md-default-fg-color)">
</path>
</svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search">
</label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
<label class="md-search__icon md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z" fill="var(--md-default-fg-color)">
</path>
</svg>
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z">
</path>
</svg>
</label>
<nav aria-label="Search" class="md-search__options">
<a aria-label="Share" class="md-search__icon md-icon" data-clipboard="" data-clipboard-text="" data-md-component="search-share" href="javascript:void(0)" tabindex="-1" title="Share">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z">
</path>
</svg>
</a>
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z">
</path>
</svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest">
</div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix="">
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation">
</ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a class="md-source" data-md-component="source" href="https://github.com/krahets/hello-algo" title="Go to repository">
<div class="md-source__icon md-icon">
<svg viewbox="0 0 496 512" xmlns="http://www.w3.org/2000/svg">
<!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
<path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z">
</path>
</svg>
</div>
<div class="md-source__repository">
krahets/hello-algo
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<section class="home-div" data-md-color-primary="grey" data-md-color-scheme="slate" style="height: min(100vh, 120vw); position: relative; margin-top:-2.4rem; padding: 0; overflow: hidden;">
<img alt="" class="hero-bg" src="../assets/hero/universe_bg.png"/>
<div class="hero-div">
<img alt="" src="../assets/hero/ground.png" style="position: absolute; width: auto; height: 26.445%; left: 28.211%; top: 54.145%;"/>
<img alt="" src="../assets/hero/links.png" style="position: absolute; width: auto; height: 78.751%; left: 10.545%; top: 7.326%;"/>
<a href="chapter_introduction/">
<img alt="" src="../assets/hero/astronaut.png" style="height: 46.673%; left: 35.413%; top: 24.343%;"/>
<span style="left: 52.744%; top: 22.319%;">
Encounter with Algorithms
</span>
</a>
<a href="chapter_computational_complexity/">
<img alt="" src="../assets/hero/chapter_computational_complexity.png" style="height: 12.347%; left: 36.267%; top: 37.653%;"/>
<span style="left: 40.244%; top: 33.919%;">
Complexity analysis
</span>
</a>
<a href="chapter_array_and_linkedlist/">
<img alt="" src="../assets/hero/chapter_array_and_linkedlist.png" style="height: 22.242%; left: 73.242%; top: 52.481%;"/>
<span style="left: 90.897%; top: 76.259%;">
Array and linked list
</span>
</a>
<a href="chapter_stack_and_queue/">
<img alt="" src="../assets/hero/chapter_stack_and_queue.png" style="height: 14.302%; left: 62.646%; top: 77.875%;"/>
<span style="left: 80.071%; top: 88.25%;">
Stack and queue
</span>
</a>
<a href="chapter_hashing/">
<img alt="" src="../assets/hero/chapter_hashing.png" style="height: 15.266%; left: 63.281%; top: 27.933%;"/>
<span style="left: 68.862%; top: 46.292%;">
Hash table
</span>
</a>
<a href="chapter_tree/">
<img alt="" src="../assets/hero/chapter_tree.png" style="height: 19.615%; left: 80.137%; top: 26.678%;"/>
<span style="left: 96.159%; top: 44.8%;">
Tree
</span>
</a>
<a href="chapter_heap/">
<img alt="" src="../assets/hero/chapter_heap.png" style="height: 10.566%; left: 77.226%; top: 11.559%;"/>
<span style="left: 88.103%; top: 15.422%;">
Heap
</span>
</a>
<a href="chapter_graph/">
<img alt="" src="../assets/hero/chapter_graph.png" style="height: 16.112%; left: 51.854%; top: 5.575%;"/>
<span style="left: 71.195%; top: 6.503%;">
Graph
</span>
</a>
<a href="chapter_searching/">
<img alt="" src="../assets/hero/chapter_searching.png" style="height: 15.149%; left: 18.185%; top: 16.404%;"/>
<span style="left: 14.556%; top: 20.876%;">
Searching
</span>
</a>
<a href="chapter_sorting/">
<img alt="" src="../assets/hero/chapter_sorting.png" style="height: 9.574%; left: 25.409%; top: 40.747%;"/>
<span style="left: 28.805%; top: 53.808%;">
Sorting
</span>
</a>
<a href="chapter_divide_and_conquer/">
<img alt="" src="../assets/hero/chapter_divide_and_conquer.png" style="height: 18.681%; left: 32.721%; top: 4.816%;"/>
<span style="left: 29.42%; top: 6.679%;">
Divide and conquer
</span>
</a>
<a href="chapter_backtracking/">
<img alt="" src="../assets/hero/chapter_backtracking.png" style="height: 17.338%; left: 4.875%; top: 32.925%;"/>
<span style="left: 4.742%; top: 50.113%;">
Backtracking
</span>
</a>
<a href="chapter_dynamic_programming/">
<img alt="" src="../assets/hero/chapter_dynamic_programming.png" style="height: 15.47%; left: 9.406%; top: 57.472%;"/>
<span style="left: 8.561%; top: 75.351%;">
Dynamic programming
</span>
</a>
<a href="chapter_greedy/">
<img alt="" src="../assets/hero/chapter_greedy.png" style="height: 14.127%; left: 23.132%; top: 75.803%;"/>
<span style="left: 21.619%; top: 86.85%;">
Greedy
</span>
</a>
</div>
<div class="heading-div">
<img alt="" src="https://readme-typing-svg.demolab.com?font=Noto+Sans+SC&amp;weight=400&amp;duration=3500&amp;pause=2000&amp;color=21C8B8&amp;center=true&amp;vCenter=true&amp;random=false&amp;width=200&amp;lines=Hello%2C+Algo+!" style="height: min(9vh, 12vw);"/>
<div style="pointer-events: auto;">
<p style="margin-top: max(-1vh, -2vw); margin-bottom: min(2vh, 3.5vw);">
Data structures and algorithms crash course with animated illustrations and off-the-shelf code
</p>
<a class="rounded-button" href="chapter_hello_algo/">
<svg viewbox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
<path d="M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152V512l-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427V224c0-17.7 14.3-32 32-32H62.3c63.6 0 125.6 19.6 177.7 56zm32 264V248c52.1-36.4 114.1-56 177.7-56H480c17.7 0 32 14.3 32 32V427c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z">
</path>
</svg>
<span>
Dive in
</span>
</a>
<a class="rounded-button" href="https://github.com/krahets/hello-algo">
<svg viewbox="0 0 496 512" xmlns="http://www.w3.org/2000/svg">
<path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z">
</path>
</svg>
<span>
GitHub
</span>
</a>
</div>
<div style="text-align: center; margin-top: min(2.5vh, 3.5vw);">
<svg fill="var(--md-default-fg-color)" height="2vh" viewbox="0 0 384 512" xmlns="http://www.w3.org/2000/svg">
<path d="M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z">
</path>
</svg>
</div>
</div>
</section>
<section class="home-div" data-md-color-scheme="slate">
<div class="section-content">
<img alt="Preview" src="index.assets/hello_algo_header.png" style="width: 100%; max-width: 41.5em;"/>
<div class="code-badge">
<img alt="" src="https://img.shields.io/badge/Python-snow?logo=python&amp;logoColor=3776AB"/>
<img alt="" src="https://img.shields.io/badge/Java-snow?logo=coffeescript&amp;logoColor=FC4C02"/>
<img alt="" src="https://img.shields.io/badge/C%2B%2B-snow?logo=c%2B%2B&amp;logoColor=00599C"/>
<img alt="" src="https://img.shields.io/badge/C-snow?logo=c&amp;logoColor=A8B9CC"/>
<img alt="" src="https://img.shields.io/badge/C%23-snow?logo=csharp&amp;logoColor=512BD4"/>
<img alt="" src="https://img.shields.io/badge/JS-snow?logo=javascript&amp;logoColor=E9CE30"/>
<img alt="" src="https://img.shields.io/badge/Go-snow?logo=go&amp;logoColor=00ADD8"/>
<img alt="" src="https://img.shields.io/badge/Swift-snow?logo=swift&amp;logoColor=F05138"/>
<img alt="" src="https://img.shields.io/badge/Rust-snow?logo=rust&amp;logoColor=000000"/>
<img alt="" src="https://img.shields.io/badge/Ruby-snow?logo=ruby&amp;logoColor=CC342D"/>
<img alt="" src="https://img.shields.io/badge/Kotlin-snow?logo=kotlin&amp;logoColor=7F52FF"/>
<img alt="" src="https://img.shields.io/badge/TS-snow?logo=typescript&amp;logoColor=3178C6"/>
<img alt="" src="https://img.shields.io/badge/Dart-snow?logo=dart&amp;logoColor=0175C2"/>
<img alt="" src="https://img.shields.io/badge/Zig-snow?logo=zig&amp;logoColor=F7A41D"/>
</div>
<p style="margin-top: 2em;">
500 animated illustrations, 14 programming languages, and 3000 community Q&amp;As to help you quickly get started with data structures and algorithms
</p>
</div>
</section>
<section class="home-div" data-md-color-primary="white" data-md-color-scheme="default">
<div class="section-content">
<div class="reading-media">
<div class="media-block">
<a href="chapter_paperbook/">
<div style="height: 8.17%;">
</div>
<img alt="Cover" class="device-on-hover" src="../assets/hero/cover_render.png" style="height: 66.83%;"/>
<div class="text-button">
<span>
Paperbook
</span>
<svg viewbox="0 0 320 512" xmlns="http://www.w3.org/2000/svg">
<path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z">
</path>
</svg>
</div>
</a>
</div>
<div class="media-block">
<a href="chapter_hello_algo/">
<div style="height: 4.34%;">
</div>
<img alt="" class="device-on-hover" src="../assets/hero/web_mac_iphone.png" style="height: 66.31%;"/>
<div style="height: 4.34%;">
</div>
<div class="text-button">
<span>
Read online
</span>
<svg viewbox="0 0 320 512" xmlns="http://www.w3.org/2000/svg">
<path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z">
</path>
</svg>
</div>
</a>
</div>
<div class="media-block">
<a href="https://github.com/krahets/hello-algo/releases">
<img alt="" class="device-on-hover" src="../assets/hero/pdf_ipad.png" style="height: 75%;"/>
<div class="text-button">
<span>
Download PDF
</span>
<svg viewbox="0 0 320 512" xmlns="http://www.w3.org/2000/svg">
<path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z">
</path>
</svg>
</div>
</a>
</div>
</div>
</div>
</section>
<section class="home-div" data-md-color-primary="grey" data-md-color-scheme="slate">
<div class="section-content">
<h3 style="text-align: center; margin: 1em auto;">
Endorsements
</h3>
<div class="intro-container" style="margin: 0 auto;">
<div class="intro-text endor-text">
<p style="margin-bottom: 0;">
“An easy-to-understand book on data structures and algorithms, which guides readers to learn by minds-on and hands-on. Strongly recommended for algorithm beginners!”
</p>
<p style="font-weight: bold;">
—— Junhui Deng, Professor, Department of computer science and technology, Tsinghua University
</p>
</div>
<div class="intro-text endor-text">
<p style="margin-bottom: 0;">
“If I had 'Hello Algo' when I was learning data structures and algorithms, it would have been 10 times easier!”
</p>
<p style="font-weight: bold;">
—— Mu Li, Senior principal scientist, Amazon
</p>
</div>
</div>
</div>
</section>
<section class="home-div" data-md-color-primary="white" data-md-color-scheme="default">
<div class="section-content">
<div class="intro-container">
<div class="intro-text">
<div>
<div style="display: flex; align-items: center;">
<svg height="1.5em" viewbox="0 0 640 512" width="1.5em" xmlns="http://www.w3.org/2000/svg">
<path d="M256 0H576c35.3 0 64 28.7 64 64V288c0 35.3-28.7 64-64 64H256c-35.3 0-64-28.7-64-64V64c0-35.3 28.7-64 64-64zM476 106.7C471.5 100 464 96 456 96s-15.5 4-20 10.7l-56 84L362.7 169c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6h80 48H552c8.9 0 17-4.9 21.2-12.7s3.7-17.3-1.2-24.6l-96-144zM336 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM64 128h96V384v32c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V384H512v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64zm8 64c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H72zm0 104c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V312c0-8.8-7.2-16-16-16H72zm0 104c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V416c0-8.8-7.2-16-16-16H72zm336 16v16c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V416c0-8.8-7.2-16-16-16H424c-8.8 0-16 7.2-16 16z" fill="var(--md-primary-bg-color)">
</path>
</svg>
<h3 style="margin-left: 0.5em;">
Animated illustrations
</h3>
</div>
<p style="margin: 0;">
It's crafted for ease of understanding, ensuring a smooth learning journey.
</p>
<p class="intro-quote">
"A picture is worth a thousand words."
</p>
</div>
</div>
<img alt="Animation example" class="intro-image" src="index.assets/animation.gif"/>
</div>
<div class="intro-container">
<img alt="Running code example" class="intro-image" src="index.assets/running_code.gif"/>
<div class="intro-text">
<div>
<div style="display: flex; align-items: center;">
<svg height="1.5em" viewbox="0 0 640 512" width="1.5em" xmlns="http://www.w3.org/2000/svg">
<path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z" fill="var(--md-primary-bg-color)">
</path>
</svg>
<h3 style="margin-left: 0.5em;">
Off-the-shelf code
</h3>
</div>
<p style="margin: 0;">
Featuring multiple programming languages, all runnable with a single click.
</p>
<p class="intro-quote">
"Talk is cheap. Show me the code."
</p>
</div>
</div>
</div>
<div class="intro-container">
<div class="intro-text">
<div>
<div style="display: flex; align-items: center;">
<svg height="1.5em" viewbox="0 0 640 512" width="1.5em" xmlns="http://www.w3.org/2000/svg">
<path d="M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128s-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6c-10.4-2-21.2-.6-30.7 4.2c-4.1 2.1-8.3 4.1-12.6 6c-16 7.2-32.9 13.5-49.9 18c2.8-4.6 5.4-9.1 7.9-13.6c1.1-1.9 2.2-3.9 3.2-5.9zM0 176c0 41.8 17.2 80.1 45.9 110.3c-.9 1.7-1.9 3.5-2.8 5.1c-10.3 18.4-22.3 36.5-36.6 52.1c-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7c4.8-2.2 9.6-4.5 14.2-6.8c15.1 3 30.9 4.5 47.1 4.5c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176zM432 480c16.2 0 31.9-1.6 47.1-4.5c4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5c3.8-8.8 2-19-4.6-25.9c-14.2-15.6-26.2-33.7-36.6-52.1c-.9-1.7-1.9-3.4-2.8-5.1C622.8 384.1 640 345.8 640 304c0-94.4-87.9-171.5-198.2-175.8c4.1 15.2 6.2 31.2 6.2 47.8l0 .6c87.2 6.7 144 67.5 144 127.4c0 28-11.4 54.9-32.7 77.2c-14.3 15-17.3 37.6-7.5 55.8c1.1 2 2.2 4 3.2 5.9c2.5 4.5 5.2 9 7.9 13.6c-17-4.5-33.9-10.7-49.9-18c-4.3-1.9-8.5-3.9-12.6-6c-9.5-4.8-20.3-6.2-30.7-4.2c-12.1 2.4-24.7 3.6-37.8 3.6c-61.7 0-110-26.5-136.8-62.3c-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z" fill="var(--md-primary-bg-color)">
</path>
</svg>
<h3 style="margin-left: 0.5em;">
Learning together
</h3>
</div>
<p style="margin: 0;">
Welcome discussions and questions with open arms.
</p>
<p class="intro-quote">
"Learning by teaching."
</p>
</div>
</div>
<img alt="Comments example" class="intro-image" src="index.assets/comment.gif"/>
</div>
</div>
</section>
<section class="home-div" data-md-color-primary="grey" data-md-color-scheme="slate">
<div class="section-content" style="max-width: 90vw;">
<div style="margin: 2em auto;">
<h3>
Author
</h3>
<div class="profile-div">
<div class="profile-cell">
<a href="https://github.com/krahets">
<img alt="Author: yudongjin" class="profile-img" src="../assets/avatar/avatar_yudongjin.jpg"/>
<br/>
<b>
Yudong Jin@krahets
</b>
</a>
</div>
</div>
</div>
<div style="margin: 2em auto;">
<h3>
Code reviewers
</h3>
<div class="profile-div">
<div class="profile-cell">
<a href="https://github.com/codingonion">
<img alt="Reviewer: codingonion" class="profile-img" src="../assets/avatar/avatar_codingonion.jpg"/>
<br/>
<b>
codingonion
</b>
<br/>
<sub>
Zig, Rust
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/curtishd">
<img alt="Reviewer: curtishd" class="profile-img" src="../assets/avatar/avatar_curtishd.jpg"/>
<br/>
<b>
curtishd
</b>
<br/>
<sub>
Kotlin
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/Gonglja">
<img alt="Reviewer: Gonglja" class="profile-img" src="../assets/avatar/avatar_Gonglja.jpg"/>
<br/>
<b>
Gonglja
</b>
<br/>
<sub>
C, C++
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/gvenusleo">
<img alt="Reviewer: gvenusleo" class="profile-img" src="../assets/avatar/avatar_gvenusleo.jpg"/>
<br/>
<b>
gvenusleo
</b>
<br/>
<sub>
Dart
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/hpstory">
<img alt="Reviewer: hpstory" class="profile-img" src="../assets/avatar/avatar_hpstory.jpg"/>
<br/>
<b>
hpstory
</b>
<br/>
<sub>
C#
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/justin-tse">
<img alt="Reviewer: justin-tse" class="profile-img" src="../assets/avatar/avatar_justin-tse.jpg"/>
<br/>
<b>
justin-tse
</b>
<br/>
<sub>
JS, TS
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/khoaxuantu">
<img alt="Reviewer: khoaxuantu" class="profile-img" src="../assets/avatar/avatar_khoaxuantu.jpg"/>
<br/>
<b>
khoaxuantu
</b>
<br/>
<sub>
Ruby
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/krahets">
<img alt="Reviewer: krahets" class="profile-img" src="../assets/avatar/avatar_krahets.jpg"/>
<br/>
<b>
krahets
</b>
<br/>
<sub>
Python, Java
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/night-cruise">
<img alt="Reviewer: night-cruise" class="profile-img" src="../assets/avatar/avatar_night-cruise.jpg"/>
<br/>
<b>
night-cruise
</b>
<br/>
<sub>
Rust
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/nuomi1">
<img alt="Reviewer: nuomi1" class="profile-img" src="../assets/avatar/avatar_nuomi1.jpg"/>
<br/>
<b>
nuomi1
</b>
<br/>
<sub>
Swift
</sub>
</a>
</div>
<div class="profile-cell">
<a href="https://github.com/Reanon">
<img alt="Reviewer: Reanon" class="profile-img" src="../assets/avatar/avatar_Reanon.jpg"/>
<br/>
<b>
Reanon
</b>
<br/>
<sub>
Go, C
</sub>
</a>
</div>
</div>
</div>
<div style="margin: 2em auto;">
<h3>
Contributors
</h3>
<p>
This book has been enhanced through the collaborative efforts of more than 100 contributors. Thanks for their invaluable time and input!
</p>
<a href="https://github.com/krahets/hello-algo/graphs/contributors">
<img alt="Contributors" src="https://contrib.rocks/image?repo=krahets/hello-algo&amp;max=300&amp;columns=16" style="width: 100%; max-width: 38.5em;"/>
</a>
</div>
</div>
</section>
<main class="md-main" data-md-component="main" style="height: 0;">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" hidden="">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Navigation" class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a aria-label="Hello Algo" class="md-nav__button md-logo" data-md-component="logo" href="." title="Hello Algo">
<img alt="logo" src="assets/images/logo.svg"/>
</a>
Hello Algo
</label>
<div class="md-nav__source">
<a class="md-source" data-md-component="source" href="https://github.com/krahets/hello-algo" title="Go to repository">
<div class="md-source__icon md-icon">
<svg viewbox="0 0 496 512" xmlns="http://www.w3.org/2000/svg">
<!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
<path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z">
</path>
</svg>
</div>
<div class="md-source__repository">
krahets/hello-algo
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_1" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_hello_algo/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m13.13 22.19-1.63-3.83c1.57-.58 3.04-1.36 4.4-2.27l-2.77 6.1M5.64 12.5l-3.83-1.63 6.1-2.77C7 9.46 6.22 10.93 5.64 12.5M19.22 4c.28 0 .53 0 .74.05.17 1.39-.02 4.25-3.3 7.53-1.7 1.71-3.73 3.02-6.01 3.89l-2.15-2.1c.92-2.31 2.23-4.34 3.92-6.03C15.18 4.58 17.64 4 19.22 4m0-2c-1.98 0-4.98.69-8.22 3.93-2.19 2.19-3.5 4.6-4.35 6.71-.28.75-.09 1.57.46 2.13l2.13 2.12c.38.38.89.61 1.42.61.23 0 .47-.06.7-.15A19.1 19.1 0 0 0 18.07 13c5.66-5.66 3.54-10.61 3.54-10.61S20.7 2 19.22 2m-4.68 7.46c-.78-.78-.78-2.05 0-2.83s2.05-.78 2.83 0c.77.78.78 2.05 0 2.83-.78.78-2.05.78-2.83 0m-5.66 7.07-1.41-1.41 1.41 1.41M6.24 22l3.64-3.64c-.34-.09-.67-.24-.97-.45L4.83 22h1.41M2 22h1.41l4.77-4.76-1.42-1.41L2 20.59V22m0-2.83 4.09-4.08c-.21-.3-.36-.62-.45-.97L2 17.76v1.41Z">
</path>
</svg>
<span class="md-ellipsis">
Before starting
</span>
</a>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_1_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon">
</span>
Before starting
</label>
<ul class="md-nav__list" data-md-scrollfix="">
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_2" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_preface/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M21 4H3a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M3 19V6h8v13H3m18 0h-8V6h8v13m-7-9.5h6V11h-6V9.5m0 2.5h6v1.5h-6V12m0 2.5h6V16h-6v-1.5Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 0. Preface
</span>
</a>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_2_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon">
</span>
Chapter 0. Preface
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_preface/about_the_book/">
<span class="md-ellipsis">
0.1 About this book
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_preface/suggestions/">
<span class="md-ellipsis">
0.2 How to read
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_preface/summary/">
<span class="md-ellipsis">
0.3 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_introduction/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 16H5V5h14v14M6.2 7.7h5v1.5h-5V7.7m6.8 8.1h5v1.5h-5v-1.5m0-2.6h5v1.5h-5v-1.5M8 18h1.5v-2h2v-1.5h-2v-2H8v2H6V16h2v2m6.1-7.1 1.4-1.4 1.4 1.4 1.1-1-1.4-1.4L18 7.1 16.9 6l-1.4 1.4L14.1 6 13 7.1l1.4 1.4L13 9.9l1.1 1Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 1. Encounter with algorithms
</span>
</a>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_3_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon">
</span>
Chapter 1. Encounter with algorithms
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_introduction/algorithms_are_everywhere/">
<span class="md-ellipsis">
1.1 Algorithms are everywhere
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_introduction/what_is_dsa/">
<span class="md-ellipsis">
1.2 What is an algorithm
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_introduction/summary/">
<span class="md-ellipsis">
1.3 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_4" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_computational_complexity/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M6 2h12v6l-4 4 4 4v6H6v-6l4-4-4-4V2m10 14.5-4-4-4 4V20h8v-3.5m-4-5 4-4V4H8v3.5l4 4M10 6h4v.75l-2 2-2-2V6Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 2. Complexity analysis
</span>
</a>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_4_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon">
</span>
Chapter 2. Complexity analysis
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_computational_complexity/performance_evaluation/">
<span class="md-ellipsis">
2.1 Algorithm efficiency assessment
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_computational_complexity/iteration_and_recursion/">
<span class="md-ellipsis">
2.2 Iteration and recursion
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_computational_complexity/time_complexity/">
<span class="md-ellipsis">
2.3 Time complexity
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_computational_complexity/space_complexity/">
<span class="md-ellipsis">
2.4 Space complexity
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_computational_complexity/summary/">
<span class="md-ellipsis">
2.5 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_5" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_data_structure/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M11 13.5v8H3v-8h8m-2 2H5v4h4v-4M12 2l5.5 9h-11L12 2m0 3.86L10.08 9h3.84L12 5.86M17.5 13c2.5 0 4.5 2 4.5 4.5S20 22 17.5 22 13 20 13 17.5s2-4.5 4.5-4.5m0 2a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-2.5-2.5Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 3. Data structures
</span>
</a>
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_5_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon">
</span>
Chapter 3. Data structures
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_data_structure/classification_of_data_structure/">
<span class="md-ellipsis">
3.1 Classification of data structures
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_data_structure/basic_data_types/">
<span class="md-ellipsis">
3.2 Basic data types
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_data_structure/number_encoding/">
<span class="md-ellipsis">
3.3 Number encoding *
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_data_structure/character_encoding/">
<span class="md-ellipsis">
3.4 Character encoding *
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_data_structure/summary/">
<span class="md-ellipsis">
3.5 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_6" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_array_and_linkedlist/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 5v14h17V5H3m4 2v2H5V7h2m-2 6v-2h2v2H5m0 2h2v2H5v-2m13 2H9v-2h9v2m0-4H9v-2h9v2m0-4H9V7h9v2Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 4. Array and linked list
</span>
</a>
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_6_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon">
</span>
Chapter 4. Array and linked list
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_array_and_linkedlist/array/">
<span class="md-ellipsis">
4.1 Array
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_array_and_linkedlist/linked_list/">
<span class="md-ellipsis">
4.2 Linked list
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_array_and_linkedlist/list/">
<span class="md-ellipsis">
4.3 List
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_array_and_linkedlist/ram_and_cache/">
<span class="md-ellipsis">
4.4 Memory and cache *
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_array_and_linkedlist/summary/">
<span class="md-ellipsis">
4.5 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_7" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_stack_and_queue/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M17.36 20.2v-5.38h1.79V22H3v-7.18h1.8v5.38h12.56M6.77 14.32l.37-1.76 8.79 1.85-.37 1.76-8.79-1.85m1.16-4.21.76-1.61 8.14 3.78-.76 1.62-8.14-3.79m2.26-3.99 1.15-1.38 6.9 5.76-1.15 1.37-6.9-5.75m4.45-4.25L20 9.08l-1.44 1.07-5.36-7.21 1.44-1.07M6.59 18.41v-1.8h8.98v1.8H6.59Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 5. Stack and queue
</span>
</a>
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_7_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon">
</span>
Chapter 5. Stack and queue
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_stack_and_queue/stack/">
<span class="md-ellipsis">
5.1 Stack
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_stack_and_queue/queue/">
<span class="md-ellipsis">
5.2 Queue
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_stack_and_queue/deque/">
<span class="md-ellipsis">
5.3 Double-ended queue
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_stack_and_queue/summary/">
<span class="md-ellipsis">
5.4 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_8" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_hashing/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M19.3 17.89c1.32-2.1.7-4.89-1.41-6.21a4.52 4.52 0 0 0-6.21 1.41C10.36 15.2 11 18 13.09 19.3c1.47.92 3.33.92 4.8 0L21 22.39 22.39 21l-3.09-3.11m-2-.62c-.98.98-2.56.97-3.54 0-.97-.98-.97-2.56.01-3.54.97-.97 2.55-.97 3.53 0 .96.99.95 2.57-.03 3.54h.03M19 4H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5.81a6.3 6.3 0 0 1-1.31-2H5v-4h4.18c.16-.71.43-1.39.82-2H5V8h6v2.81a6.3 6.3 0 0 1 2-1.31V8h6v2a6.499 6.499 0 0 1 2 2V6a2 2 0 0 0-2-2Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 6. Hash table
</span>
</a>
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_8_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon">
</span>
Chapter 6. Hash table
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_hashing/hash_map/">
<span class="md-ellipsis">
6.1 Hash table
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_hashing/hash_collision/">
<span class="md-ellipsis">
6.2 Hash collision
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_hashing/hash_algorithm/">
<span class="md-ellipsis">
6.3 Hash algorithm
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_hashing/summary/">
<span class="md-ellipsis">
6.4 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_9" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_tree/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M19.5 17c-.14 0-.26 0-.39.04L17.5 13.8c.45-.45.75-1.09.75-1.8a2.5 2.5 0 0 0-2.5-2.5c-.14 0-.25 0-.4.04L13.74 6.3c.47-.46.76-1.09.76-1.8a2.5 2.5 0 0 0-5 0c0 .7.29 1.34.76 1.79L8.65 9.54c-.15-.04-.26-.04-.4-.04a2.5 2.5 0 0 0-2.5 2.5c0 .71.29 1.34.75 1.79l-1.61 3.25C4.76 17 4.64 17 4.5 17a2.5 2.5 0 0 0 0 5A2.5 2.5 0 0 0 7 19.5c0-.7-.29-1.34-.76-1.79l1.62-3.25c.14.04.26.04.39.04s.25 0 .38-.04l1.63 3.25c-.47.45-.76 1.09-.76 1.79a2.5 2.5 0 0 0 5 0A2.5 2.5 0 0 0 12 17c-.13 0-.26 0-.39.04L10 13.8c.45-.45.75-1.09.75-1.8 0-.7-.29-1.33-.75-1.79l1.61-3.25c.13.04.26.04.39.04s.26 0 .39-.04L14 10.21a2.5 2.5 0 0 0 1.75 4.29c.13 0 .25 0 .38-.04l1.63 3.25c-.47.45-.76 1.09-.76 1.79a2.5 2.5 0 0 0 5 0 2.5 2.5 0 0 0-2.5-2.5m-15 3.5c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1m8.5-1c0 .55-.45 1-1 1s-1-.45-1-1 .45-1 1-1 1 .45 1 1M7.25 12c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1M11 4.5c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1m3.75 7.5c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1m4.75 8.5c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 7. Tree
</span>
</a>
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_9_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon">
</span>
Chapter 7. Tree
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_tree/binary_tree/">
<span class="md-ellipsis">
7.1 Binary tree
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_tree/binary_tree_traversal/">
<span class="md-ellipsis">
7.2 Binary tree traversal
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_tree/array_representation_of_tree/">
<span class="md-ellipsis">
7.3 Array Representation of tree
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_tree/binary_search_tree/">
<span class="md-ellipsis">
7.4 Binary Search tree
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_tree/avl_tree/">
<span class="md-ellipsis">
7.5 AVL tree *
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_tree/summary/">
<span class="md-ellipsis">
7.6 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_10" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_heap/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 1a2.5 2.5 0 0 0-2.5 2.5A2.5 2.5 0 0 0 11 5.79V7H7a2 2 0 0 0-2 2v.71A2.5 2.5 0 0 0 3.5 12 2.5 2.5 0 0 0 5 14.29V15H4a2 2 0 0 0-2 2v1.21A2.5 2.5 0 0 0 .5 20.5 2.5 2.5 0 0 0 3 23a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 4 18.21V17h4v1.21a2.5 2.5 0 0 0-1.5 2.29A2.5 2.5 0 0 0 9 23a2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-1.5-2.29V17a2 2 0 0 0-2-2H7v-.71A2.5 2.5 0 0 0 8.5 12 2.5 2.5 0 0 0 7 9.71V9h10v.71A2.5 2.5 0 0 0 15.5 12a2.5 2.5 0 0 0 1.5 2.29V15h-1a2 2 0 0 0-2 2v1.21a2.5 2.5 0 0 0-1.5 2.29A2.5 2.5 0 0 0 15 23a2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-1.5-2.29V17h4v1.21a2.5 2.5 0 0 0-1.5 2.29A2.5 2.5 0 0 0 21 23a2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-1.5-2.29V17a2 2 0 0 0-2-2h-1v-.71A2.5 2.5 0 0 0 20.5 12 2.5 2.5 0 0 0 19 9.71V9a2 2 0 0 0-2-2h-4V5.79a2.5 2.5 0 0 0 1.5-2.29A2.5 2.5 0 0 0 12 1m0 1.5a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1M6 11a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m12 0a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1M3 19.5a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m6 0a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m6 0a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m6 0a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 8. Heap
</span>
</a>
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_10_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon">
</span>
Chapter 8. Heap
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_heap/heap/">
<span class="md-ellipsis">
8.1 Heap
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_heap/build_heap/">
<span class="md-ellipsis">
8.2 Building a heap
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_heap/top_k/">
<span class="md-ellipsis">
8.3 Top-k problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_heap/summary/">
<span class="md-ellipsis">
8.4 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_11" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_graph/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m12 5.37-.44-.06L6 14.9c.24.21.4.48.47.78h11.06c.07-.3.23-.57.47-.78l-5.56-9.59-.44.06M6.6 16.53l4.28 2.53c.29-.27.69-.43 1.12-.43.43 0 .83.16 1.12.43l4.28-2.53H6.6M12 22a1.68 1.68 0 0 1-1.68-1.68l.09-.56-4.3-2.55c-.31.36-.76.58-1.27.58a1.68 1.68 0 0 1-1.68-1.68c0-.79.53-1.45 1.26-1.64V9.36c-.83-.11-1.47-.82-1.47-1.68A1.68 1.68 0 0 1 4.63 6c.55 0 1.03.26 1.34.66l4.41-2.53-.06-.45c0-.93.75-1.68 1.68-1.68.93 0 1.68.75 1.68 1.68l-.06.45 4.41 2.53c.31-.4.79-.66 1.34-.66a1.68 1.68 0 0 1 1.68 1.68c0 .86-.64 1.57-1.47 1.68v5.11c.73.19 1.26.85 1.26 1.64a1.68 1.68 0 0 1-1.68 1.68c-.51 0-.96-.22-1.27-.58l-4.3 2.55.09.56A1.68 1.68 0 0 1 12 22M10.8 4.86 6.3 7.44l.02.24c0 .71-.44 1.32-1.06 1.57l.03 5.25 5.51-9.64m2.4 0 5.51 9.64.03-5.25c-.62-.25-1.06-.86-1.06-1.57l.02-.24-4.5-2.58Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 9. Graph
</span>
</a>
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_11_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon">
</span>
Chapter 9. Graph
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_graph/graph/">
<span class="md-ellipsis">
9.1 Graph
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_graph/graph_operations/">
<span class="md-ellipsis">
9.2 Basic graph operations
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_graph/graph_traversal/">
<span class="md-ellipsis">
9.3 Graph traversal
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_graph/summary/">
<span class="md-ellipsis">
9.4 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_12" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_searching/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m19.31 18.9 3.08 3.1L21 23.39l-3.12-3.07c-.69.43-1.51.68-2.38.68-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5c0 .88-.25 1.71-.69 2.4m-3.81.1a2.5 2.5 0 0 0 0-5 2.5 2.5 0 0 0 0 5M21 4v2H3V4h18M3 16v-2h6v2H3m0-5V9h18v2h-2.03c-1.01-.63-2.2-1-3.47-1s-2.46.37-3.47 1H3Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 10. Searching
</span>
</a>
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_12_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon">
</span>
Chapter 10. Searching
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_searching/binary_search/">
<span class="md-ellipsis">
10.1 Binary search
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_searching/binary_search_insertion/">
<span class="md-ellipsis">
10.2 Binary search insertion
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_searching/binary_search_edge/">
<span class="md-ellipsis">
10.3 Binary search boundaries
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_searching/replace_linear_by_hashing/">
<span class="md-ellipsis">
10.4 Hashing optimization strategies
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_searching/searching_algorithm_revisited/">
<span class="md-ellipsis">
10.5 Search algorithms revisited
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_searching/summary/">
<span class="md-ellipsis">
10.6 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_13" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_sorting/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 17h3l-4 4-4-4h3V3h2M2 17h10v2H2M6 5v2H2V5m0 6h7v2H2v-2Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 11. Sorting
</span>
</a>
<label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_13_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_13">
<span class="md-nav__icon md-icon">
</span>
Chapter 11. Sorting
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/sorting_algorithm/">
<span class="md-ellipsis">
11.1 Sorting algorithms
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/selection_sort/">
<span class="md-ellipsis">
11.2 Selection sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/bubble_sort/">
<span class="md-ellipsis">
11.3 Bubble sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/insertion_sort/">
<span class="md-ellipsis">
11.4 Insertion sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/quick_sort/">
<span class="md-ellipsis">
11.5 Quick sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/merge_sort/">
<span class="md-ellipsis">
11.6 Merge sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/heap_sort/">
<span class="md-ellipsis">
11.7 Heap sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/bucket_sort/">
<span class="md-ellipsis">
11.8 Bucket sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/counting_sort/">
<span class="md-ellipsis">
11.9 Counting sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/radix_sort/">
<span class="md-ellipsis">
11.10 Radix sort
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_sorting/summary/">
<span class="md-ellipsis">
11.11 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_14" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_divide_and_conquer/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M17 7v2h5V7h-5M2 9v6h5V9H2m10 0v2H9v2h3v2l3-3-3-3m5 2v2h5v-2h-5m0 4v2h5v-2h-5Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 12. Divide and conquer
</span>
</a>
<label class="md-nav__link" for="__nav_14" id="__nav_14_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_14_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_14">
<span class="md-nav__icon md-icon">
</span>
Chapter 12. Divide and conquer
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_divide_and_conquer/divide_and_conquer/">
<span class="md-ellipsis">
12.1 Divide and conquer algorithms
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_divide_and_conquer/binary_search_recur/">
<span class="md-ellipsis">
12.2 Divide and conquer search strategy
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_divide_and_conquer/build_binary_tree_problem/">
<span class="md-ellipsis">
12.3 Building binary tree problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_divide_and_conquer/hanota_problem/">
<span class="md-ellipsis">
12.4 Tower of Hanoi Problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_divide_and_conquer/summary/">
<span class="md-ellipsis">
12.5 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_15" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_backtracking/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M18 15a3 3 0 0 1 3 3 3 3 0 0 1-3 3 2.99 2.99 0 0 1-2.83-2H14v-2h1.17c.41-1.17 1.52-2 2.83-2m0 2a1 1 0 0 0-1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0-1-1m0-9a1.43 1.43 0 0 0 1.43-1.43 1.43 1.43 0 1 0-2.86 0A1.43 1.43 0 0 0 18 8m0-5.43a4 4 0 0 1 4 4C22 9.56 18 14 18 14s-4-4.44-4-7.43a4 4 0 0 1 4-4M8.83 17H10v2H8.83A2.99 2.99 0 0 1 6 21a3 3 0 0 1-3-3c0-1.31.83-2.42 2-2.83V14h2v1.17c.85.3 1.53.98 1.83 1.83M6 17a1 1 0 0 0-1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0-1-1M6 3a3 3 0 0 1 3 3c0 1.31-.83 2.42-2 2.83V10H5V8.83A2.99 2.99 0 0 1 3 6a3 3 0 0 1 3-3m0 2a1 1 0 0 0-1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0-1-1m5 14v-2h2v2h-2m-4-6H5v-2h2v2Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 13. Backtracking
</span>
</a>
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_15_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_15">
<span class="md-nav__icon md-icon">
</span>
Chapter 13. Backtracking
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_backtracking/backtracking_algorithm/">
<span class="md-ellipsis">
13.1 Backtracking algorithms
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_backtracking/permutations_problem/">
<span class="md-ellipsis">
13.2 Permutation problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_backtracking/subset_sum_problem/">
<span class="md-ellipsis">
13.3 Subset sum problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_backtracking/n_queens_problem/">
<span class="md-ellipsis">
13.4 n queens problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_backtracking/summary/">
<span class="md-ellipsis">
13.5 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_16" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_dynamic_programming/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M22 15h-2v3c0 1.11-.89 2-2 2h-3v2l-3-3 3-3v2h3v-3h-2l3-3 3 3m0-11v4c0 1.1-.9 2-2 2H10v10c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h16c1.1 0 2 .9 2 2M4 8h4V4H4v4m0 2v4h4v-4H4m4 10v-4H4v4h4m6-12V4h-4v4h4m6-4h-4v4h4V4Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 14. Dynamic programming
</span>
</a>
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_16_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_16">
<span class="md-nav__icon md-icon">
</span>
Chapter 14. Dynamic programming
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/intro_to_dynamic_programming/">
<span class="md-ellipsis">
14.1 Introduction to dynamic programming
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/dp_problem_features/">
<span class="md-ellipsis">
14.2 Characteristics of DP problems
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/dp_solution_pipeline/">
<span class="md-ellipsis">
14.3 DP problem-solving approach¶
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/knapsack_problem/">
<span class="md-ellipsis">
14.4 0-1 Knapsack problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/unbounded_knapsack_problem/">
<span class="md-ellipsis">
14.5 Unbounded knapsack problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/edit_distance_problem/">
<span class="md-ellipsis">
14.6 Edit distance problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_dynamic_programming/summary/">
<span class="md-ellipsis">
14.7 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_17" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_greedy/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M13 3c3.88 0 7 3.14 7 7 0 2.8-1.63 5.19-4 6.31V21H9v-3H8c-1.11 0-2-.89-2-2v-3H4.5c-.42 0-.66-.5-.42-.81L6 9.66A7.003 7.003 0 0 1 13 3m0-2C8.41 1 4.61 4.42 4.06 8.9L2.5 11h-.03l-.02.03c-.55.76-.62 1.76-.19 2.59.36.69 1 1.17 1.74 1.32V16c0 1.85 1.28 3.42 3 3.87V23h11v-5.5c2.5-1.67 4-4.44 4-7.5 0-4.97-4.04-9-9-9m4 7.83c0 1.54-1.36 2.77-3.42 4.64L13 14l-.58-.53C10.36 11.6 9 10.37 9 8.83c0-1.2.96-2.19 2.16-2.2h.04c.69 0 1.35.31 1.8.83.45-.52 1.11-.83 1.8-.83 1.2-.01 2.2.96 2.2 2.16v.04Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 15. Greedy
</span>
</a>
<label class="md-nav__link" for="__nav_17" id="__nav_17_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_17_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_17">
<span class="md-nav__icon md-icon">
</span>
Chapter 15. Greedy
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_greedy/greedy_algorithm/">
<span class="md-ellipsis">
15.1 Greedy algorithms
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_greedy/fractional_knapsack_problem/">
<span class="md-ellipsis">
15.2 Fractional knapsack problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_greedy/max_capacity_problem/">
<span class="md-ellipsis">
15.3 Maximum capacity problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_greedy/max_product_cutting_problem/">
<span class="md-ellipsis">
15.4 Maximum product cutting problem
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_greedy/summary/">
<span class="md-ellipsis">
15.5 Summary
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_18" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_appendix/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z">
</path>
</svg>
<span class="md-ellipsis">
Chapter 16. Appendix
</span>
</a>
<label class="md-nav__link" for="__nav_18" id="__nav_18_label" tabindex="0">
<span class="md-nav__icon md-icon">
</span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_18_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_18">
<span class="md-nav__icon md-icon">
</span>
Chapter 16. Appendix
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_appendix/installation/">
<span class="md-ellipsis">
16.1 Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_appendix/contribution/">
<span class="md-ellipsis">
16.2 Contributing
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="chapter_appendix/terminology/">
<span class="md-ellipsis">
16.3 Terminology
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_19" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="chapter_reference/">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M9 3v15h3V3H9m3 2 4 13 3-1-4-13-3 1M5 5v13h3V5H5M3 19v2h18v-2H3Z">
</path>
</svg>
<span class="md-ellipsis">
References
</span>
</a>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_19_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_19">
<span class="md-nav__icon md-icon">
</span>
References
</label>
<ul class="md-nav__list" data-md-scrollfix="">
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" hidden="">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<nav aria-label="Footer" class="md-footer__inner md-grid">
</nav>
</article>
</div>
<script>
var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}
</script>
<script>
var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))
</script>
</div>
<button class="md-top md-icon" data-md-component="top" hidden="" type="button">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z">
</path>
</svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2024 krahets
<br/>
The website content is licensed under
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
CC BY-NC-SA 4.0
</a>
</div>
</div>
<div class="md-social">
<a class="md-social__link" href="https://github.com/krahets" rel="noopener" target="_blank" title="github.com">
<svg viewbox="0 0 496 512" xmlns="http://www.w3.org/2000/svg">
<!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
<path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z">
</path>
</svg>
</a>
<a class="md-social__link" href="https://twitter.com/krahets" rel="noopener" target="_blank" title="twitter.com">
<svg viewbox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
<!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
<path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9L389.2 48zm-24.8 373.8h39.1L151.1 88h-42l255.3 333.8z">
</path>
</svg>
</a>
<a class="md-social__link" href="https://leetcode.cn/u/jyd/" rel="noopener" target="_blank" title="leetcode.cn">
<svg viewbox="0 0 640 512" xmlns="http://www.w3.org/2000/svg">
<!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.-->
<path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3l89.3 89.4-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z">
</path>
</svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset">
</div>
</div>
<script id="__config" type="application/json">
{"base": ".", "features": ["announce.dismiss", "content.action.edit", "content.code.annotate", "content.code.copy", "content.tabs.link", "content.tooltips", "navigation.indexes", "navigation.top", "navigation.footer", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}
</script>
<script src="assets/javascripts/bundle.c18c5fb9.min.js">
</script>
<script src="javascripts/mathjax.js">
</script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.min.js">
</script>
</body>
</html>