<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://siddh.art/feed.xml" rel="self" type="application/atom+xml" /><link href="https://siddh.art/" rel="alternate" type="text/html" /><updated>2026-04-21T05:18:50+00:00</updated><id>https://siddh.art/feed.xml</id><title type="html">Siddharth Bhatnagar</title><subtitle>Personal Blog</subtitle><author><name>Siddharth Bhatnagar</name></author><entry><title type="html">Notes from Stanford CS144 Course</title><link href="https://siddh.art/CS144-notes/" rel="alternate" type="text/html" title="Notes from Stanford CS144 Course" /><published>2025-03-25T00:00:00+00:00</published><updated>2025-03-25T00:00:00+00:00</updated><id>https://siddh.art/CS144-notes</id><content type="html" xml:base="https://siddh.art/CS144-notes/"><![CDATA[<p>I’ve decided to start dedicating each month of the year to learning/polishing a core CS area, there’s always something new to learn out there. For me particularly, there’s a lot! I whiled away my time during my undergrad for the most part, so hopefully this fixes my foundation. For areas where I’m quite confident (Algorithms), I’ll try and take on tougher challenges</p>

<p>For April, I’ve selected Computer Networks, this is partly motivated by my work at ELB team at AWS, and the course that I’ll be doing is Stanford CS144.</p>

<p>course website: <a href="https://cs144.github.io/">https://cs144.github.io/</a></p>

<h2 id="unit-1">Unit 1</h2>

<ul>
  <li>Important networking design principles:
    <ul>
      <li>Layering</li>
      <li>Encapsulation</li>
      <li>Packet Switching</li>
    </ul>
  </li>
  <li>Key concept: reliable bytestream over unreliable network
    <ul>
      <li>can be arranged in different ways to achieve different applications</li>
      <li>E.g. client-server, bittorrent, skype</li>
    </ul>
  </li>
</ul>]]></content><author><name>Siddharth Bhatnagar</name></author><category term="Software" /><summary type="html"><![CDATA[I’ve decided to start dedicating each month of the year to learning/polishing a core CS area, there’s always something new to learn out there. For me particularly, there’s a lot! I whiled away my time during my undergrad for the most part, so hopefully this fixes my foundation. For areas where I’m quite confident (Algorithms), I’ll try and take on tougher challenges]]></summary></entry><entry><title type="html">Leetcode 41 using partition | TC: O(n) SC: O(1)</title><link href="https://siddh.art/Leetcode-41/" rel="alternate" type="text/html" title="Leetcode 41 using partition | TC: O(n) SC: O(1)" /><published>2024-07-12T00:00:00+00:00</published><updated>2024-07-12T00:00:00+00:00</updated><id>https://siddh.art/Leetcode-41</id><content type="html" xml:base="https://siddh.art/Leetcode-41/"><![CDATA[<h4 id="41-first-missing-positive"><a href="https://leetcode.com/problems/first-missing-positive/">41. First Missing Positive</a></h4>

<p>Given an unsorted integer array <code class="language-plaintext highlighter-rouge">nums</code>. Return the  <em>smallest positive integer</em>  that is  <em>not present</em>  in <code class="language-plaintext highlighter-rouge">nums</code>.</p>

<p>You must implement an algorithm that runs in <code class="language-plaintext highlighter-rouge">O(n)</code> time and uses <code class="language-plaintext highlighter-rouge">O(1)</code> auxiliary space.</p>

<p><strong>Example 1:</strong></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Input: nums = [1,2,0]
Output: 3
Explanation: The numbers in the range [1,2] are all in the array.
</code></pre></div></div>

<p><strong>Example 2:</strong></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Input: nums = [3,4,-1,1]
Output: 2
Explanation: 1 is in the array but 2 is missing.
</code></pre></div></div>

<p><strong>Example 3:</strong></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Input: nums = [7,8,9,11,12]
Output: 1
Explanation: The smallest positive integer 1 is missing.
</code></pre></div></div>

<p><strong>Constraints:</strong>
 </p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">1 &lt;= nums.length &lt;= 105</code></li>
  <li><code class="language-plaintext highlighter-rouge">-231&lt;= nums[i] &lt;= 231- 1</code></li>
</ul>

<p><strong>Solution</strong></p>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span> <span class="p">{</span>
<span class="nl">public:</span>
    <span class="kt">int</span> <span class="n">firstMissingPositive</span><span class="p">(</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&amp;</span> <span class="n">nums</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">auto</span> <span class="n">it</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">partition</span><span class="p">(</span><span class="n">nums</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">nums</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="p">[](</span><span class="kt">int</span> <span class="n">x</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="n">x</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">;});</span>
        <span class="k">if</span> <span class="p">(</span><span class="n">it</span> <span class="o">==</span> <span class="n">nums</span><span class="p">.</span><span class="n">end</span><span class="p">())</span> <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
        
        <span class="kt">long</span> <span class="kt">long</span> <span class="kt">int</span> <span class="n">si</span> <span class="o">=</span> <span class="n">it</span><span class="o">-</span><span class="n">nums</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
        <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">idx</span> <span class="o">=</span> <span class="n">si</span><span class="p">;</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="n">nums</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="n">idx</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
            <span class="kt">int</span> <span class="n">absv</span> <span class="o">=</span> <span class="n">abs</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">idx</span><span class="p">]);</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">si</span> <span class="o">+</span> <span class="n">absv</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="n">nums</span><span class="p">.</span><span class="n">size</span><span class="p">())</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">si</span> <span class="o">+</span> <span class="n">absv</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="n">abs</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">si</span> <span class="o">+</span> <span class="n">absv</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]);</span>
        <span class="p">}</span>

        <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">idx</span> <span class="o">=</span> <span class="n">si</span><span class="p">;</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="n">nums</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="n">idx</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span>
                <span class="k">return</span> <span class="n">idx</span> <span class="o">-</span> <span class="n">si</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
        <span class="p">}</span>
        <span class="k">return</span> <span class="n">nums</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">-</span> <span class="n">si</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
        
    <span class="p">}</span>
<span class="p">};</span>
</code></pre></div></div>]]></content><author><name>Siddharth Bhatnagar</name></author><category term="Leetcode" /><category term="Algorithms" /><summary type="html"><![CDATA[41. First Missing Positive]]></summary></entry><entry><title type="html">Simple python solution to (419) Battleships in a Board | TC: O(m.n) SC: O(1)</title><link href="https://siddh.art/Leetcode-419/" rel="alternate" type="text/html" title="Simple python solution to (419) Battleships in a Board | TC: O(m.n) SC: O(1)" /><published>2023-10-29T00:00:00+00:00</published><updated>2023-10-29T00:00:00+00:00</updated><id>https://siddh.art/Leetcode-419</id><content type="html" xml:base="https://siddh.art/Leetcode-419/"><![CDATA[<h4 id="419-battleships-in-a-board"><a href="https://leetcode.com/problems/battleships-in-a-board/description/">419. Battleships in a Board</a></h4>

<p>Given an <code class="language-plaintext highlighter-rouge">m x n</code> matrix <code class="language-plaintext highlighter-rouge">board</code> where each cell is a battleship <code class="language-plaintext highlighter-rouge">'X'</code> or empty <code class="language-plaintext highlighter-rouge">'.'</code>, return the number of the <strong>battleships</strong>  on <code class="language-plaintext highlighter-rouge">board</code>.</p>

<p><strong>Battleships</strong>  can only be placed horizontally or vertically on <code class="language-plaintext highlighter-rouge">board</code>. In other words, they can only be made of the shape <code class="language-plaintext highlighter-rouge">1 x k</code> (<code class="language-plaintext highlighter-rouge">1</code> row, <code class="language-plaintext highlighter-rouge">k</code> columns) or <code class="language-plaintext highlighter-rouge">k x 1</code> (<code class="language-plaintext highlighter-rouge">k</code> rows, <code class="language-plaintext highlighter-rouge">1</code> column), where <code class="language-plaintext highlighter-rouge">k</code> can be of any size. At least one horizontal or vertical cell separates between two battleships (i.e., there are no adjacent battleships).</p>

<p><strong>Example 1:</strong></p>

<p><img alt="" src="https://assets.leetcode.com/uploads/2021/04/10/battelship-grid.jpg" style="width: 133px; height: 133px;" /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Input: board = [["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
Output: 2
</code></pre></div></div>

<p><strong>Example 2:</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Input: board = [["."]]
Output: 0
</code></pre></div></div>

<p><strong>Constraints:</strong></p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">m == board.length</code></li>
  <li><code class="language-plaintext highlighter-rouge">n == board[i].length</code></li>
  <li><code class="language-plaintext highlighter-rouge">1 &lt;= m, n &lt;= 200</code></li>
  <li><code class="language-plaintext highlighter-rouge">board[i][j]</code> is either <code class="language-plaintext highlighter-rouge">'.'</code> or <code class="language-plaintext highlighter-rouge">'X'</code>.</li>
</ul>

<p><strong>Solution:</strong></p>

<p>We could simply count the top-left corners of a battleship, and since there
are no colliding battleships, these points uniquely identify a battleship</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">countBattleships</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">board</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">m</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">board</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">board</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">ans</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">board</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="s">'.'</span><span class="p">:</span>
                    <span class="k">continue</span>
                <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">board</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="s">'X'</span><span class="p">:</span>
                    <span class="k">continue</span>
                <span class="k">if</span> <span class="n">j</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">board</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">'X'</span><span class="p">:</span>
                    <span class="k">continue</span>
                <span class="n">ans</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="n">ans</span>
</code></pre></div></div>]]></content><author><name>Siddharth Bhatnagar</name></author><category term="Leetcode" /><category term="Algorithms" /><summary type="html"><![CDATA[419. Battleships in a Board]]></summary></entry></feed>