Two Sum

Easy

title: "Two Sum" difficulty: "Easy" tags: ["Array", "Hash Table"]

<style> .ts2-wrap{ --bg: #FFFFFF; --panel: #FFFFFF; --panel-2: #FAFAFA; --line: #E9E9EC; --ink: #16171A; --ink-dim: #83848A; --accent: #5B4FE5; --accent-soft: #F1F0FD; --success: #1E9E6B; --success-soft: #EEF9F4; --amber: #C97F1E; --mono: 'JetBrains Mono','Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; --sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-family: var(--sans); color: var(--ink); background: var(--bg); max-width: 840px; margin: 0 auto; padding: 40px 24px 80px; line-height: 1.6; } .ts2-wrap *{box-sizing:border-box;} .ts2-head-row{display:flex; align-items:center; gap:12px; flex-wrap:wrap;} .ts2-wrap h1{font-size:28px; font-weight:750; letter-spacing:-0.01em; margin:0;} .ts2-badge{ font-family:var(--mono); font-size:12px; font-weight:600; padding:4px 11px; border-radius:20px; color:var(--success); background:var(--success-soft); border:1px solid rgba(30,158,107,0.2); } .ts2-tags{display:flex; gap:8px; margin-top:14px; flex-wrap:wrap;} .ts2-tag{ display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:500; color:var(--ink-dim); padding:5px 11px; border-radius:8px; background:var(--panel-2); border:1px solid var(--line); } .ts2-tag svg{width:13px; height:13px; flex-shrink:0;} .ts2-divider{height:1px; background:var(--line); margin:28px 0;} .ts2-statement{font-size:15.5px; color:var(--ink); max-width:680px;} .ts2-statement code{ font-family:var(--mono); font-size:14px; background:var(--panel-2); border:1px solid var(--line); padding:1px 6px; border-radius:5px; color:var(--accent); } .ts2-statement p{margin-bottom:14px;} .ts2-statement em{font-style:italic;} .ts2-sec-title{ font-size:15px; font-weight:700; margin:34px 0 14px; display:flex; align-items:center; gap:8px; } .ts2-sec-title svg{width:16px; height:16px; color:var(--accent); flex-shrink:0;} /* Autoplay example diagram */ .ts2-diagram{ border:1px solid var(--line); border-radius:14px; padding:30px 24px; background:var(--panel-2); display:flex; flex-direction:column; align-items:center; gap:20px; } .ts2-diagram-caption{font-family:var(--mono); font-size:13px; color:var(--ink-dim);} .ts2-diagram-caption b{color:var(--ink);} .ts2-array-row{display:flex; gap:10px; position:relative; padding-top:20px;} .ts2-cell{ width:56px; height:56px; border-radius:11px; border:1.5px solid var(--line); display:flex; align-items:center; justify-content:center; font-family:var(--mono); font-size:18px; font-weight:700; color:var(--ink); background:#FFFFFF; position:relative; transition: all .5s cubic-bezier(.4,0,.2,1); } .ts2-cell .ts2-idx{position:absolute; bottom:-20px; font-size:10.5px; color:var(--ink-dim); font-weight:400; font-family:var(--mono);} .ts2-pointer{ position:absolute; top:-4px; width:8px; height:8px; border-radius:50%; background:var(--accent); animation: ts2Pointer 8s ease infinite; } .ts2-equation{ font-family:var(--mono); font-size:15px; color:var(--ink-dim); min-height:22px; animation: ts2Fade3 8s ease infinite; } .ts2-equation .num{color:var(--success); font-weight:700;} .ts2-equation .arrow{color:var(--ink-dim); margin:0 6px;} .ts2-equation .out{color:var(--accent); font-weight:700;} .ts2-caption-stack{position:relative; width:100%; max-width:440px; min-height:20px; text-align:center;} .ts2-caption{ position:absolute; top:0; left:0; right:0; font-size:13.5px; color:var(--ink-dim); opacity:0; } .ts2-caption .hl{color:var(--ink); font-weight:600;} .ts2-caption .ok{color:var(--success); font-weight:700;} .ts2-caption.cap1{animation: ts2Fade1 8s ease infinite;} .ts2-caption.cap2{animation: ts2Fade2 8s ease infinite;} .ts2-caption.cap3{animation: ts2Fade3 8s ease infinite;} .ts2-cell.cell-a{animation: ts2CellA 8s ease infinite;} .ts2-cell.cell-b{animation: ts2CellB 8s ease infinite;} @keyframes ts2Pointer{ 0% { left:24px; opacity:0; } 5% { left:24px; opacity:0; } 7% { left:24px; opacity:1; } 29% { left:24px; opacity:1; } 34% { left:90px; opacity:1; } 36% { left:90px; opacity:1; } 59% { left:90px; opacity:1; } 62% { left:90px; opacity:0; } 100% { left:90px; opacity:0; } } @keyframes ts2Fade1{ 0%,5% { opacity:0; } 7%,27% { opacity:1; } 29%,100%{ opacity:0; } } @keyframes ts2Fade2{ 0%,34% { opacity:0; } 36%,57% { opacity:1; } 59%,100%{ opacity:0; } } @keyframes ts2Fade3{ 0%,64% { opacity:0; } 66%,92% { opacity:1; } 94%,100%{ opacity:0; } } @keyframes ts2CellA{ 0%,4% { border-color:var(--line); background:#FFFFFF; box-shadow:none; transform:translateY(0); } 6%,29% { border-color:var(--accent); background:#FFFFFF; box-shadow:0 0 0 3px var(--accent-soft); transform:translateY(-3px); } 32%,64% { border-color:var(--line); background:#FFFFFF; box-shadow:none; transform:translateY(0); } 66%,94% { border-color:var(--success); background:var(--success-soft); box-shadow:0 0 0 3px rgba(30,158,107,0.14); transform:translateY(-3px); } 97%,100%{ border-color:var(--line); background:#FFFFFF; box-shadow:none; transform:translateY(0); } } @keyframes ts2CellB{ 0%,34% { border-color:var(--line); background:#FFFFFF; box-shadow:none; transform:translateY(0); } 36%,59% { border-color:var(--accent); background:#FFFFFF; box-shadow:0 0 0 3px var(--accent-soft); transform:translateY(-3px); } 62%,64% { border-color:var(--line); background:#FFFFFF; box-shadow:none; transform:translateY(0); } 66%,94% { border-color:var(--success); background:var(--success-soft); box-shadow:0 0 0 3px rgba(30,158,107,0.14); transform:translateY(-3px); } 97%,100%{ border-color:var(--line); background:#FFFFFF; box-shadow:none; transform:translateY(0); } } /* Examples */ .ts2-example{margin-bottom:16px;} .ts2-example-label{font-size:13.5px; font-weight:700; margin-bottom:8px; color:var(--ink);} .ts2-example-box{ background:var(--panel-2); border:1px solid var(--line); border-radius:10px; padding:16px 18px; font-family:var(--mono); font-size:13.5px; color:var(--ink); } .ts2-example-box div{margin-bottom:4px;} .ts2-example-box div:last-child{margin-bottom:0;} .ts2-example-box .lbl{color:var(--ink-dim);} /* Constraints */ .ts2-constraints{display:flex; flex-direction:column; gap:10px;} .ts2-constraint-row{ display:grid; grid-template-columns:160px 1fr; gap:16px; align-items:center; padding:12px 16px; border:1px solid var(--line); border-radius:10px; background:var(--panel-2); } .ts2-constraint-row .k{font-size:13.5px; font-weight:600; color:var(--ink);} .ts2-constraint-row .v{font-family:var(--mono); font-size:13px; color:var(--ink-dim);} .ts2-note{ display:flex; align-items:flex-start; gap:10px; margin-top:20px; font-size:13.5px; color:var(--ink-dim); padding:14px 16px; background:var(--accent-soft); border:1px solid rgba(91,79,229,0.15); border-radius:10px; } .ts2-note svg{width:15px; height:15px; color:var(--accent); flex-shrink:0; margin-top:1px;} .ts2-note b{color:var(--ink);} .ts2-companies{display:flex; gap:8px; flex-wrap:wrap; margin-top:14px;} .ts2-company{ font-size:12.5px; color:var(--ink-dim); padding:5px 12px; border-radius:8px; background:var(--panel-2); border:1px solid var(--line); } </style> <div class="ts2-wrap"> <div class="ts2-head-row"> <h1>Two Sum</h1> <span class="ts2-badge">Easy</span> </div> <div class="ts2-tags"> <span class="ts2-tag"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg> Array </span> <span class="ts2-tag"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M4 6h16M4 12h16M4 18h10"/><circle cx="19" cy="18" r="2"/></svg> Hash Table </span> </div> <div class="ts2-divider"></div> <div class="ts2-statement"> <p>Given an array of integers <code>nums</code> and an integer <code>target</code>, return indices of the two numbers such that they add up to <code>target</code>.</p> <p>You may assume that each input would have <em>exactly one</em> solution, and you may not use the same element twice.</p> <p>You can return the answer in any order.</p> </div> <div class="ts2-sec-title"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><path d="M12 8v4l3 2"/></svg> Example Walkthrough </div> <div class="ts2-diagram"> <div class="ts2-diagram-caption">nums = <b>[2, 7, 11, 15]</b> &nbsp;·&nbsp; target = <b>9</b></div> <div class="ts2-array-row"> <div class="ts2-cell cell-a">2<span class="ts2-idx">i=0</span></div> <div class="ts2-cell cell-b">7<span class="ts2-idx">i=1</span></div> <div class="ts2-cell">11<span class="ts2-idx">i=2</span></div> <div class="ts2-cell">15<span class="ts2-idx">i=3</span></div> <div class="ts2-pointer"></div> </div> <div class="ts2-caption-stack"> <div class="ts2-caption cap1">Start at index <span class="hl">0</span> — nums[0] = <span class="hl">2</span>.</div> <div class="ts2-caption cap2">Move to index <span class="hl">1</span> — nums[1] = <span class="hl">7</span>. Together they make <span class="ok">9</span>, the target.</div> <div class="ts2-caption cap3">That pair adds up to the target — <span class="ok">this is the answer.</span></div> </div> <div class="ts2-equation"> <span class="num">2</span> + <span class="num">7</span><span class="arrow">=</span><span class="out">9</span><span class="arrow">→</span> Output: <span class="out">[0, 1]</span> </div> </div> <div class="ts2-sec-title"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 9h18M8 4v16"/></svg> Examples </div> <div class="ts2-example"> <div class="ts2-example-label">Example 1</div> <div class="ts2-example-box"> <div><span class="lbl">Input:</span> nums = [2,7,11,15], target = 9</div> <div><span class="lbl">Output:</span> [0,1]</div> <div><span class="lbl">Explanation:</span> Because nums[0] + nums[1] == 9, we return [0, 1].</div> </div> </div> <div class="ts2-example"> <div class="ts2-example-label">Example 2</div> <div class="ts2-example-box"> <div><span class="lbl">Input:</span> nums = [3,2,4], target = 6</div> <div><span class="lbl">Output:</span> [1,2]</div> </div> </div> <div class="ts2-example"> <div class="ts2-example-label">Example 3</div> <div class="ts2-example-box"> <div><span class="lbl">Input:</span> nums = [3,3], target = 6</div> <div><span class="lbl">Output:</span> [0,1]</div> </div> </div> <div class="ts2-sec-title"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M9 6h11M9 12h11M9 18h11"/><circle cx="4" cy="6" r="1.5" fill="currentColor" stroke="none"/><circle cx="4" cy="12" r="1.5" fill="currentColor" stroke="none"/><circle cx="4" cy="18" r="1.5" fill="currentColor" stroke="none"/></svg> Constraints </div> <div class="ts2-constraints"> <div class="ts2-constraint-row"><div class="k">Array Length</div><div class="v">2 &lt;= nums.length &lt;= 10^4</div></div> <div class="ts2-constraint-row"><div class="k">Element Value</div><div class="v">-10^9 &lt;= nums[i] &lt;= 10^9</div></div> <div class="ts2-constraint-row"><div class="k">Target Value</div><div class="v">-10^9 &lt;= target &lt;= 10^9</div></div> </div> <div class="ts2-note"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="9"/><path d="M12 8h.01M11 12h1v4h1"/></svg> <div><b>Note:</b> Only one valid answer exists.</div> </div> <div class="ts2-companies"> <span class="ts2-company">Google</span> <span class="ts2-company">Amazon</span> <span class="ts2-company">Meta</span> </div> </div>
CompaniesGoogleAmazonMeta
JavaScript

Login to write code

Solve problems, verify your skills, and earn XP.