<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nithya Dharshini official</title>
    <description>The latest articles on Forem by Nithya Dharshini official (@nithya_dharshiniofficial).</description>
    <link>https://forem.com/nithya_dharshiniofficial</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3688401%2F51f483a7-e9b5-4cad-9f79-02ba70a672a5.jpg</url>
      <title>Forem: Nithya Dharshini official</title>
      <link>https://forem.com/nithya_dharshiniofficial</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nithya_dharshiniofficial"/>
    <language>en</language>
    <item>
      <title>Cracking "Duplicate Zeros" with 0ms Runtime</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Wed, 01 Apr 2026 17:23:30 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/cracking-duplicate-zeros-with-0ms-runtime-3f6d</link>
      <guid>https://forem.com/nithya_dharshiniofficial/cracking-duplicate-zeros-with-0ms-runtime-3f6d</guid>
      <description>&lt;p&gt;Just hit that 0ms (100th percentile) milestone on LeetCode! Here is a quick breakdown of how to solve the Duplicate Zeros problem using a clean "Buffer" strategy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9ldmbofz5k4j3vvfw6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9ldmbofz5k4j3vvfw6o.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Duplicate every 0 in a fixed-length array while shifting other elements to the right. Anything pushed beyond the original array size is discarded.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input: [1, 0, 2, 3, 0, 4, 5, 0]
Output: [1, 0, 0, 2, 3, 0, 0, 4]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Strategy: Speed Over Space
&lt;/h2&gt;

&lt;p&gt;While the "ideal" interview answer is an in-place, two-pointer approach O(1) space, I used a Buffer Strategy O(n) space:&lt;br&gt;
&lt;strong&gt;The Buffer:&lt;/strong&gt; I created a temporary vector to store the result.&lt;br&gt;
&lt;strong&gt;The Logic:&lt;/strong&gt; Iterate through the array. If it's a 0, push two. If not, push one.&lt;br&gt;
&lt;strong&gt;The Sync:&lt;/strong&gt; Overwrite the original array.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code (C++)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;duplicateZeros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Overwrite in-place as requested (using our buffer)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Performance vs. Requirements
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;My Runtime:&lt;/strong&gt; 0 ms (Beats 100%)&lt;br&gt;
&lt;strong&gt;The Constraint:&lt;/strong&gt; "Do it in place."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it wrong?&lt;/strong&gt; Technically, it violates the O(1) space constraint usually intended by "in-place."&lt;br&gt;
&lt;strong&gt;Is it fast?&lt;/strong&gt; Absolutely. Modern memory allocation and linear copying are so optimized that this approach often outperforms complex pointer logic on small-to-medium datasets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;In a real interview, I'd explain the O(1) space-optimal approach (iterating backward), but in a production environment, sometimes the most readable code is the best code.How do you feel about using extra space to gain performance? Let’s debate in the comments! &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Sun, 29 Mar 2026 14:45:42 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/-2i2h</link>
      <guid>https://forem.com/nithya_dharshiniofficial/-2i2h</guid>
      <description></description>
    </item>
    <item>
      <title>Partition Labels – Greedy + Two Pointer Thinking</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Thu, 26 Mar 2026 15:53:39 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/partition-labels-greedy-two-pointer-thinking-3djp</link>
      <guid>https://forem.com/nithya_dharshiniofficial/partition-labels-greedy-two-pointer-thinking-3djp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdhssq3tgaoj4urvv95y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdhssq3tgaoj4urvv95y.png" alt=" " width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This problem looks confusing at first…&lt;br&gt;
“Split the string so each character appears in only one part” . But once you see the pattern, it becomes very clean.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Idea
&lt;/h2&gt;

&lt;p&gt;Each character has a last occurrence in the string.&lt;br&gt;
 -&amp;gt; If you know how far a character goes,&lt;br&gt;
you can decide where to cut the partition&lt;/p&gt;
&lt;h2&gt;
  
  
  Approach (Simple Thinking)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 1:&lt;/em&gt;&lt;/strong&gt; Store last position of each character&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="sc"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;Now you know:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
  &lt;strong&gt;-&amp;gt;&lt;/strong&gt; where each character must end&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 2:&lt;/em&gt;&lt;/strong&gt; Traverse and expand partition&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start from index 0
Keep updating end = farthest last occurrence seen so far
end = max(end, last[s[i] - 'a']);
Step 3: When i == end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You found a valid partition store its length start a new partition&lt;/p&gt;

&lt;h2&gt;
  
  
  Code (C++)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;partitionLabels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;//step 1:store last index&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="sc"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;//step 2:expand window&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="sc"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

            &lt;span class="c1"&gt;//step 3:cut partition&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Input:&lt;/em&gt;  -&amp;gt; "ababcbacadefegdehijhklij"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Output:&lt;/em&gt; -&amp;gt; [9, 7, 8]&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Think
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Treat it like a window&lt;/li&gt;
&lt;li&gt;Expand until all characters are “safe”&lt;/li&gt;
&lt;li&gt;When no future dependency -&amp;gt;  cut&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Time: O(n)&lt;br&gt;
Space: O(1) (26 characters only)&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Not all problems are pure two-pointer&lt;/li&gt;
&lt;li&gt;This is more like greedy + window expansion&lt;/li&gt;
&lt;li&gt;Tracking last occurrence is the key trick&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Two Sum IV – Input is a BST (Two Pointer Approach)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Thu, 19 Mar 2026 15:47:10 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/two-sum-iv-input-is-a-bst-two-pointer-approach-1mo8</link>
      <guid>https://forem.com/nithya_dharshiniofficial/two-sum-iv-input-is-a-bst-two-pointer-approach-1mo8</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxbaifrkaeorpb94o02g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxbaifrkaeorpb94o02g.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We already know the classic Two Sum problem on arrays.&lt;br&gt;
But what if the data is inside a Binary Search Tree (BST)?&lt;/p&gt;

&lt;p&gt;At first, it looks tricky… but we can convert it into something familiar.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Idea
&lt;/h2&gt;

&lt;p&gt;A BST inorder traversal gives a sorted array.Once we have a sorted array, we can apply:&lt;br&gt;
    -&amp;gt; Two Pointer Technique&lt;/p&gt;
&lt;h2&gt;
  
  
  Approach
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Convert BST → Sorted Array&lt;/strong&gt;&lt;br&gt;
Use inorder traversal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Left → Root → Right
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This guarantees sorted order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Apply Two Pointers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;left = 0 , right = n - 1&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Then:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If sum == target -&amp;gt; return true&lt;/li&gt;
&lt;li&gt;If sum &amp;lt; target  -&amp;gt; move left++&lt;/li&gt;
&lt;li&gt;If sum &amp;gt; target  -&amp;gt; move right--&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;p&gt;BST property -&amp;gt; inorder gives sorted values&lt;br&gt;
Sorted values -&amp;gt; perfect for two pointer optimization&lt;/p&gt;

&lt;p&gt;So we reduce:&lt;/p&gt;

&lt;p&gt;Tree problem -&amp;gt; Array problem&lt;/p&gt;
&lt;h2&gt;
  
  
  Code (C++)
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;inorder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TreeNode&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;inorder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;inorder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;findTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TreeNode&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;inorder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Input:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root = [5,3,6,2,4,null,7]
k = 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Sorted array:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Check pairs:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2 + 7 = 9&lt;/p&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Time: O(n)&lt;br&gt;
Space: O(n) (for array)&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tree problems can be simplified using traversal&lt;/li&gt;
&lt;li&gt;Converting to array helps reuse known patterns&lt;/li&gt;
&lt;li&gt;Two pointer works beautifully on sorted data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Sometimes the best trick is:&lt;br&gt;
   -&amp;gt; Convert the problem into something you already know&lt;/p&gt;

&lt;p&gt;Tree -&amp;gt; Array&lt;br&gt;
Array -&amp;gt; Two Pointer&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Remove Duplicates from Sorted Array II (LeetCode 80) — Simple Explanation</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Tue, 17 Mar 2026 15:59:40 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/remove-duplicates-from-sorted-array-ii-leetcode-80-simple-explanation-3j15</link>
      <guid>https://forem.com/nithya_dharshiniofficial/remove-duplicates-from-sorted-array-ii-leetcode-80-simple-explanation-3j15</guid>
      <description>&lt;p&gt;This problem is a great extension of the basic two-pointer technique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem Understanding
&lt;/h2&gt;

&lt;p&gt;We are given a sorted array.&lt;br&gt;
  -&amp;gt; We must remove duplicates in-place&lt;br&gt;
  -&amp;gt; But each element can appear at most twice&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Input: -&amp;gt; [1,1,1,2,2,3]&lt;/p&gt;

&lt;p&gt;Output: -&amp;gt; [1,1,2,2,3]&lt;/p&gt;

&lt;p&gt;Return: -&amp;gt; k = 5&lt;/p&gt;
&lt;h2&gt;
  
  
  Idea (Very Simple)
&lt;/h2&gt;

&lt;p&gt;We use two pointers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;j -&amp;gt; reads elements&lt;br&gt;
k -&amp;gt; writes valid elements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Condition&lt;/strong&gt;&lt;br&gt;
if (k &amp;lt; 2 || nums[j] != nums[k - 2])&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does this mean?&lt;/strong&gt;&lt;br&gt;
First 2 elements are always allowed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;After that:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Compare current element with 2 positions before&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If same -&amp;gt; skip 
If different -&amp;gt; include 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why k - 2?
&lt;/h2&gt;

&lt;p&gt;Because we allow maximum 2 duplicates so we check “Did we already take this number twice?”&lt;/p&gt;

&lt;h2&gt;
  
  
  C++ Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;removeDuplicates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
                &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Dry Run (Important)
&lt;/h2&gt;

&lt;p&gt;Input: -&amp;gt; &lt;strong&gt;[1,1,1,2,2,3]&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;j&lt;/th&gt;
&lt;th&gt;nums[j]&lt;/th&gt;
&lt;th&gt;k&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;take&lt;/td&gt;
&lt;td&gt;[1]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;take&lt;/td&gt;
&lt;td&gt;[1,1]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;skip&lt;/td&gt;
&lt;td&gt;[1,1]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;take&lt;/td&gt;
&lt;td&gt;[1,1,2]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;take&lt;/td&gt;
&lt;td&gt;[1,1,2,2]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;take&lt;/td&gt;
&lt;td&gt;[1,1,2,2,3]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Time Complexity : O(n)&lt;/p&gt;

&lt;p&gt;Space Complexity : O(1)&lt;/p&gt;

&lt;p&gt;No extra array used &lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Two-pointer technique is very powerful&lt;/li&gt;
&lt;li&gt;Instead of counting duplicates, we can control placement&lt;/li&gt;
&lt;li&gt;k - 2 trick ensures at most 2 duplicates&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Understanding Prefix Sum with a Practical Example (Pocket Money Tracker)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Tue, 10 Mar 2026 16:52:24 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/understanding-prefix-sum-with-a-practical-example-pocket-money-tracker-3imb</link>
      <guid>https://forem.com/nithya_dharshiniofficial/understanding-prefix-sum-with-a-practical-example-pocket-money-tracker-3imb</guid>
      <description>&lt;p&gt;Prefix Sum is a simple but powerful technique used in many array problems instead of recalculating sums repeatedly, we store running totals to answer queries instantly.Let’s understand this using a small real-life example.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Scenario: Pocket Money Tracker
&lt;/h2&gt;

&lt;p&gt;Imagine you are tracking your daily expenses for a week.You store them in an array:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;expenses = [10, 20, 5, 15, 30, 10, 50]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each number represents the amount spent on that day.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Expense&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Now your friend asks questions like:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much did you spend from Day 2 to Day 4?&lt;/li&gt;
&lt;li&gt;What was the total from Day 0 to Day 5?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you calculate this every time using a loop, it becomes inefficient. This is where Prefix Sum helps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Build the Prefix Sum Array
&lt;/h2&gt;

&lt;p&gt;Prefix sum stores the running total of expenses.&lt;/p&gt;

&lt;p&gt;Formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;expenses&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Result:&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Prefix Sum&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;140&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the prefix array becomes: -&amp;gt; [10, 30, 35, 50, 80, 90, 140]&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Answer Queries Instantly
&lt;/h2&gt;

&lt;p&gt;Now suppose we want the total from Day 2 to Day 4.&lt;/p&gt;

&lt;p&gt;Instead of adding: 5 + 15 + 30&lt;/p&gt;

&lt;p&gt;We simply do: prefix[4] - prefix[1]&lt;/p&gt;

&lt;p&gt;Which gives: 80 - 30 = 50  (Instant answer ^-^)&lt;/p&gt;

&lt;h2&gt;
  
  
  C++ Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;L&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;pref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"Total spending: "&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output: -&amp;gt; 50&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Prefix Sum is Powerful
&lt;/h2&gt;

&lt;p&gt;Without Prefix Sum: Each query → O(n)&lt;br&gt;
With Prefix Sum: Each query → O(1)&lt;/p&gt;

&lt;p&gt;This is extremely useful when we have many range queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaway
&lt;/h2&gt;

&lt;p&gt;Prefix Sum is useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need sum of elements in a range&lt;/li&gt;
&lt;li&gt;There are multiple queries&lt;/li&gt;
&lt;li&gt;You want fast lookup instead of repeated loops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;It is widely used in:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data analytics&lt;/li&gt;
&lt;li&gt;Financial calculations&lt;/li&gt;
&lt;li&gt;Competitive programming&lt;/li&gt;
&lt;li&gt;Range query problems&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Battery Optimization Mode – A Custom Sliding Window Problem(Real World Example)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Mon, 09 Mar 2026 16:52:01 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/battery-optimization-mode-a-custom-sliding-window-problemreal-world-example-2a66</link>
      <guid>https://forem.com/nithya_dharshiniofficial/battery-optimization-mode-a-custom-sliding-window-problemreal-world-example-2a66</guid>
      <description>&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;Smart glasses run heavy processing tasks like real-time navigation or object detection.Each minute the processor consumes some power.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We are given:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An array power_drain each value represents power consumption per minute (mW).A power_budget which is the maximum safe power usage. Our goal:&lt;/p&gt;

&lt;p&gt;-&amp;gt; Find the maximum number of consecutive minutes the glasses can run without exceeding the power budget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Input&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;power_drain = [3, 1, 2, 7, 4, 2, 1, 1, 5]&lt;br&gt;
power_budget = 8&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explanation
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The longest valid subarray is:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[4, 2, 1, 1]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sum = 8&lt;br&gt;
Length = 4 minutes&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach — Variable Sliding Window
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;We use two pointers:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;left  → start of window&lt;br&gt;
right → end of window&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Steps&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expand the window by moving right&lt;/li&gt;
&lt;li&gt;Add the current power consumption&lt;/li&gt;
&lt;li&gt;If the total exceeds the budget, shrink from left&lt;/li&gt;
&lt;li&gt;Track the maximum window length&lt;/li&gt;
&lt;li&gt;This technique avoids recalculating sums repeatedly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  C++ Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;power_drain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;power_budget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;minSum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;power_drain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;power_drain&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="n"&gt;minSum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;power_drain&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

        &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minSum&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;power_budget&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;erase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
            &lt;span class="n"&gt;minSum&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;power_drain&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Time Complexity - O(n)&lt;br&gt;
Each element enters and leaves the window at most once.&lt;/p&gt;

&lt;p&gt;Space Complexity - O(n)&lt;br&gt;
Because we store the current window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Idea
&lt;/h2&gt;

&lt;p&gt;This is called a Variable Sliding Window because the window expands and shrinks depending on the condition.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Condition here:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;window_sum &amp;lt;= power_budget&lt;/p&gt;

&lt;p&gt;If it exceeds the budget → shrink from the left.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Problem Teaches
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Real world usage of Sliding Window&lt;/li&gt;
&lt;li&gt;Efficient way to find longest subarray with sum ≤ k&lt;/li&gt;
&lt;li&gt;Using two pointers technique&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This pattern is very common in problems related to:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;battery usage&lt;br&gt;
network bandwidth&lt;br&gt;
memory allocation&lt;br&gt;
CPU utilization&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Sliding Window on a Circular Array — Defuse the Bomb (LeetCode 1652)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Thu, 05 Mar 2026 17:06:24 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/sliding-window-on-a-circular-array-defuse-the-bomb-leetcode-1652-31hn</link>
      <guid>https://forem.com/nithya_dharshiniofficial/sliding-window-on-a-circular-array-defuse-the-bomb-leetcode-1652-31hn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3w2ciibfex1pku96qw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3w2ciibfex1pku96qw3.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today I solved an interesting Sliding Window problem on a circular array.This problem helped me understand how sliding windows work when the array wraps around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem Summary
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;We are given:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A circular array code and an integer k. We must replace each element with a sum of other elements depending on k.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Rules&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If k &amp;gt; 0 → sum of the next k elements&lt;br&gt;
If k &amp;lt; 0 → sum of the previous |k| elements&lt;br&gt;
If k = 0 → result is 0&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;:&lt;br&gt;
The array is circular.That means:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;code[n-1] → next element is code[0]&lt;br&gt;
code[0]   → previous element is code[n-1]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Input: -&amp;gt; code = [5,7,1,4] , k = 3&lt;br&gt;
Result: -&amp;gt; [12,10,16,13]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 → 7 + 1 + 4 = 12&lt;br&gt;
7 → 1 + 4 + 5 = 10&lt;br&gt;
1 → 4 + 5 + 7 = 16&lt;br&gt;
4 → 5 + 7 + 1 = 13&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Idea
&lt;/h2&gt;

&lt;p&gt;Instead of recalculating sums again and again, we use a Sliding Window.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Steps&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build the first window sum.&lt;/li&gt;
&lt;li&gt;Slide the window.&lt;/li&gt;
&lt;li&gt;Remove the leaving element.&lt;/li&gt;
&lt;li&gt;Add the entering element.&lt;/li&gt;
&lt;li&gt;Because the array is circular, we use:&lt;/li&gt;
&lt;li&gt;index % n&lt;/li&gt;
&lt;li&gt;to wrap around the array.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  C++ Implementation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Solution {
public:
    vector&amp;lt;int&amp;gt; decrypt(vector&amp;lt;int&amp;gt;&amp;amp; code, int k) {
        vector&amp;lt;int&amp;gt; v(code.size(),0);
        int n = code.size();

        if(k == 0) return v;

        int start = (k &amp;gt; 0) ? 1 : n + k;
        int end   = (k &amp;gt; 0) ? k : n - 1;

        int winSum = 0;

        for(int i = start; i &amp;lt;= end; ++i){
            winSum += code[i];
        }

        for(int i = 0; i &amp;lt; n; ++i){
            v[i] = winSum;

            winSum -= code[start % n];
            winSum += code[(end + 1) % n];

            start++;
            end++;
        }

        return v;
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Time Complexity - O(n)&lt;br&gt;
We traverse the array only once.&lt;/p&gt;

&lt;p&gt;Space Complexity - O(n)&lt;br&gt;
For storing the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sliding Window can work on circular arrays&lt;/li&gt;
&lt;li&gt;% n helps wrap indexes&lt;/li&gt;
&lt;li&gt;Instead of recalculating sums, we update the window efficiently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small problem, but a great practice for advanced sliding window thinking.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Understanding Happy Number (LeetCode 202) – HashSet + Cycle Detection</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Wed, 04 Mar 2026 17:10:43 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/understanding-happy-number-leetcode-202-hashset-cycle-detection-3j98</link>
      <guid>https://forem.com/nithya_dharshiniofficial/understanding-happy-number-leetcode-202-hashset-cycle-detection-3j98</guid>
      <description>&lt;p&gt;Today I solved a classic problem that looks simple but teaches an important concept: cycle detection using a HashSet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A number is called a Happy Number.If replace the number with the sum of squares of its digits.Repeat the process if it eventually becomes 1, it is happy.If it enters a loop and never reaches 1, it is not happy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input:-&amp;gt; n = 19&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Process&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1² + 9² = 82&lt;br&gt;
8² + 2² = 68&lt;br&gt;
6² + 8² = 100&lt;br&gt;
1² + 0² + 0² = 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since it reaches 1, the answer is true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Idea
&lt;/h2&gt;

&lt;p&gt;1) The tricky part is:&lt;/p&gt;

&lt;p&gt;-&amp;gt; Some numbers fall into an infinite cycle.&lt;/p&gt;

&lt;p&gt;2) So how do we detect that?&lt;/p&gt;

&lt;p&gt;3) We store already seen numbers inside a HashSet.&lt;/p&gt;

&lt;p&gt;4) If a number repeats → we are in a cycle → return false.&lt;/p&gt;

&lt;h2&gt;
  
  
  C++ Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Solution {
private:
    int SqrtOfSum(int n){
        int sum = 0;
        while(n &amp;gt; 0){
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }

public:
    bool isHappy(int n) {
        unordered_set&amp;lt;int&amp;gt; ust;

        while(n != 1 &amp;amp;&amp;amp; ust.find(n) == ust.end()){
            ust.insert(n);
            n = SqrtOfSum(n);
        }

        return n == 1;
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Time Complexity: O(log n) (digit processing repeatedly)&lt;br&gt;
Space Complexity: O(log n) (numbers stored in set)&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;How to break a number into digits using % 10 and / 10.&lt;/li&gt;
&lt;li&gt;How to detect cycles using unordered_set.&lt;/li&gt;
&lt;li&gt;Not all loops are obvious — sometimes you must detect them manually.&lt;/li&gt;
&lt;li&gt;Simple problem, powerful concept.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>From Prefix Array to Clean Variables – LeetCode 1732 (Find the Highest Altitude)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Tue, 24 Feb 2026 16:40:06 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/from-prefix-array-to-clean-variables-leetcode-1732-find-the-highest-altitude-19fe</link>
      <guid>https://forem.com/nithya_dharshiniofficial/from-prefix-array-to-clean-variables-leetcode-1732-find-the-highest-altitude-19fe</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6m9au35sklksy7evicb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6m9au35sklksy7evicb.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today I solved a simple but important prefix-sum type problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A biker starts at altitude 0.You are given an array gain where:&lt;br&gt;
gain[i] = net altitude change from point i to i+1. We must return the highest altitude reached during the trip.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gain = [-5, 1, 5, 0, -7]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;Altitude journey:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start: 0
0 + (-5) = -5
-5 + 1 = -4
-4 + 5 = 1
1 + 0 = 1
1 + (-7) = -6

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Highest altitude = 1&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Tried First (Correct but Unnecessary)
&lt;/h2&gt;

&lt;p&gt;I created a full prefix array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Solution {
public:
    int largestAltitude(vector&amp;lt;int&amp;gt;&amp;amp; gain) {
        vector&amp;lt;int&amp;gt; prefix(gain.size(),0);
        prefix[0]=gain[0];
        int temp=INT_MIN;

        for(int i=1;i&amp;lt;gain.size();++i){
            prefix[i] = prefix[i-1]+gain[i];
        }

        for(int x : prefix){
            temp=max(x,temp);
        }

        if(temp &amp;lt; 0) return 0;
        return temp;
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this works:&lt;/p&gt;

&lt;p&gt;It builds cumulative altitude.Then finds the maximum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it's unnecessary:
&lt;/h2&gt;

&lt;p&gt;We don't need to store all prefix values.We only need the current altitude and maximum altitude.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned (Cleaner Approach)
&lt;/h2&gt;

&lt;p&gt;We can solve it using just two variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Solution {
public:
    int largestAltitude(vector&amp;lt;int&amp;gt;&amp;amp; gain) {
        int current_altitude = 0;
        int max_altitude = 0;

        for (int g : gain) {
            current_altitude += g;
            max_altitude = max(max_altitude, current_altitude);
        }

        return max_altitude;
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Is Better
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;No extra array&lt;/li&gt;
&lt;li&gt;No second loop&lt;/li&gt;
&lt;li&gt;Cleaner logic&lt;/li&gt;
&lt;li&gt;More memory efficient&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time Complexity: O(n)
Space Complexity: O(1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Takeaway
&lt;/h2&gt;

&lt;p&gt;This problem teaches an important lesson:&lt;/p&gt;

&lt;p&gt;Prefix sum does NOT always mean creating a prefix array.Sometimes, a simple running variable is enough.Small problem, but big clarity moment.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Mastering Fixed Sliding Window in C++ (LeetCode 1876)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Mon, 23 Feb 2026 16:18:39 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/mastering-fixed-sliding-window-in-c-leetcode-1876-1emc</link>
      <guid>https://forem.com/nithya_dharshiniofficial/mastering-fixed-sliding-window-in-c-leetcode-1876-1emc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchktayps6k5lv2bojh4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchktayps6k5lv2bojh4c.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today I solved a beautiful Sliding Window problem that perfectly demonstrates how fixed-size windows work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Count substrings of size 3 with all distinct characters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Understanding&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are given a string s. We need to count how many substrings of length 3 contain all distinct characters.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s = "xyzzaz"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Valid substrings of length 3:&lt;/p&gt;

&lt;p&gt;"xyz" &lt;/p&gt;

&lt;p&gt;"yzz"  (z repeated)&lt;/p&gt;

&lt;p&gt;"zza" &lt;/p&gt;

&lt;p&gt;"zaz" &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Output:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Sliding Window?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Since the substring size is fixed (3), this is a Fixed Sliding Window problem.&lt;/li&gt;
&lt;li&gt;Instead of generating all substrings (which would be inefficient), we:&lt;/li&gt;
&lt;li&gt;Maintain a window of size 3.&lt;/li&gt;
&lt;li&gt;Use a frequency map to track character counts.&lt;/li&gt;
&lt;li&gt;Slide the window one step at a time.&lt;/li&gt;
&lt;li&gt;Check if all characters are distinct.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Approach
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; -&amp;gt; Initialize first window (size 3)&lt;/p&gt;

&lt;p&gt;Add first 3 characters into a hashmap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; -&amp;gt; Check validity&lt;/p&gt;

&lt;p&gt;If all frequencies are 1 → count it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; -&amp;gt; Slide the window&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For every next position&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove left character&lt;/li&gt;
&lt;li&gt;Add new right character&lt;/li&gt;
&lt;li&gt;Check validity again&lt;/li&gt;
&lt;li&gt;Repeat until the end.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  C++ Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Solution {
private:
    void counter(unordered_map&amp;lt;char,int&amp;gt;&amp;amp; umap, int&amp;amp; count){
        bool res = true;
        for(auto it : umap){
            if(it.second &amp;gt; 1){
                res = false;
                break;
            }
        }
        if(res) count++;
    }

public:
    int countGoodSubstrings(string s) {
        int count = 0;
        unordered_map&amp;lt;char,int&amp;gt; umap;

        // First window
        for(int i = 0; i &amp;lt; 3; i++)
            umap[s[i]]++;

        counter(umap, count);

        // Slide window
        for(int i = 3; i &amp;lt; s.size(); i++){
            umap[s[i-3]]--;
            umap[s[i]]++;

            counter(umap, count);
        }

        return count;
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complexity Analysis
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time Complexity: O(n) -&amp;gt; Each character is processed once.
Space Complexity: O(1)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Window size is fixed (at most 3 characters in map).&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimization Tip
&lt;/h2&gt;

&lt;p&gt;Since window size is always 3, we can simplify the check . Instead of iterating over the entire map, we can just check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if(umap.size() == 3)
    count++;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because if all characters are distinct, the map size will be 3.Cleaner and faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;-&amp;gt; Fixed window problems are simpler than variable window problems.&lt;/p&gt;

&lt;p&gt;-&amp;gt; Frequency maps help validate constraints efficiently.&lt;/p&gt;

&lt;p&gt;-&amp;gt; Sliding window avoids brute-force substring generation.&lt;/p&gt;

&lt;p&gt;-&amp;gt; Small problem. Big pattern clarity.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Find Pivot Index (Prefix Sum Made Simple)</title>
      <dc:creator>Nithya Dharshini official</dc:creator>
      <pubDate>Sat, 21 Feb 2026 17:52:58 +0000</pubDate>
      <link>https://forem.com/nithya_dharshiniofficial/find-pivot-index-prefix-sum-made-simple-2h68</link>
      <guid>https://forem.com/nithya_dharshiniofficial/find-pivot-index-prefix-sum-made-simple-2h68</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbztx0cwemyeujn99os24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbztx0cwemyeujn99os24.png" alt=" " width="401" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The Pivot Index of an array is the index where:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sum of elements on the left = Sum of elements on the right&lt;/li&gt;
&lt;li&gt;If no such index exists, return -1.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key Idea
&lt;/h2&gt;

&lt;p&gt;1) Instead of calculating left and right sums again and again (which is slow), we can&lt;br&gt;
2) Compute the total sum of the array.&lt;br&gt;
3) Keep a running left sum. At each index:&lt;br&gt;
  -&amp;gt; Right sum = totalSum - leftSum - nums[i]&lt;br&gt;
  -&amp;gt; If leftSum == rightSum, that index is the pivot.&lt;/p&gt;

&lt;p&gt;This avoids nested loops and makes the solution efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Efficient Approach (Prefix Logic)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Steps:&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find total sum.&lt;/li&gt;
&lt;li&gt;Traverse the array.&lt;/li&gt;
&lt;li&gt;At each index:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Check if left sum equals right sum.&lt;/li&gt;
&lt;li&gt;Update left sum.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  C++ Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Solution {
public:
    int pivotIndex(vector&amp;lt;int&amp;gt;&amp;amp; nums) {
        int totalSum = 0;
        for (int num : nums)
            totalSum += num;

        int leftSum = 0;

        for (int i = 0; i &amp;lt; nums.size(); i++) {
            if (leftSum == totalSum - leftSum - nums[i])
                return i;

            leftSum += nums[i];
        }

        return -1;
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Input: [1, 7, 3, 6, 5, 6]&lt;/p&gt;

&lt;p&gt;At index 3: -&amp;gt; Left sum = 1 + 7 + 3 = 11 .  -&amp;gt; Right sum = 5 + 6 = 11&lt;/p&gt;

&lt;p&gt;So output: 3&lt;/p&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time    O(n)
Space   O(1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;This problem teaches: How to use prefix sum thinking, How to avoid unnecessary recomputation, How to optimize from O(n²) to O(n)&lt;/p&gt;

&lt;p&gt;Simple logic. Clean thinking. Efficient solution. 💪&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>dsa</category>
      <category>cpp</category>
    </item>
  </channel>
</rss>
