---Advertisement---

Top 20 DSA Fundamental Concepts Jo Har Student Ko Pata Hone Chahiye | With Code & Complexity

Published On: March 29, 2026
Follow Us
array traversal in java with index diagram binary search algorithm visualization stack data structure LIFO diagram
---Advertisement---

Table of Contents

Bhai, DSA Kyu Padhna Chahiye? (Why DSA is Important?)

Ek baar socho — tum ek interview mein baithe ho, interviewer ne pucha:

“Array mein se duplicate element find karo O(n) time mein.”

Agar tumne DSA nahi padha, toh tum sirf ek nested loop likh doge — O(n²) — aur interviewer ki aankhon mein woh disappointing look aayega.

array traversal in java with index diagram binary search algorithm visualization stack data structure LIFO diagram
TOP 20 DSA FUNAMENTALS

Lekin agar tumne DSA padha hai? Tum confidently HashMap use karke O(n) mein solve kar doge. Aur interviewer ka reaction hoga — “Nice approach!”

DSA = Data Structures + Algorithms

Yeh sirf college subject nahi hai bhai. Yeh woh foundation hai jiske upar tumhara poora software engineering career khada hota hai. Google, Amazon, Microsoft, Flipkart — sabka interview DSA se shuru hota hai.

DSA Kyu Zaroori Hai? (Real Life Analogy)

Socho tumhare paas ek wardrobe hai. Agar tumne kapde randomly throw kar diye, toh subah kuch dhundne mein bahut time lagega. Lekin agar tumne sort karke rakhe — colors ke hisaab se, types ke hisaab se — toh 10 seconds mein mil jayega.

Yahi kaam DSA karta hai programs ke saath. Sahi data structure choose karo, sahi algorithm lagao — program fast chalega, memory kam lagegi, aur log tumhara code appreciate karenge. 💪

📚 Is Blog Se Kya Milega?

Is ek blog mein tum seekhoge:

  • ✅ Top 20 DSA concepts — simple Hinglish mein
  • ✅ Har concept ka real-life example
  • ✅ Java code — har line pe comment
  • ✅ Time Complexity aur Space Complexity table
  • ✅ Interview ke liye simple script answer

Chalo shuru karte hain!


1️⃣ Array Traversal — Sab Ka Baap

Definition

Array ek linear data structure hai jisme elements contiguous memory mein store hote hain. Traversal matlab — ek ek element ko access karna.

Real Life Example

Jaise school mein attendance lene ke liye teacher ek ek student ka naam pukarti hai — yahi array traversal hai.

Code with Comments

public class ArrayTraversal {
    public static void main(String[] args) {

        int[] arr = {10, 20, 30, 40, 50}; // Array declare kiya 5 elements ke saath

        // Loop start hota hai index 0 se, array ki length tak
        for (int i = 0; i < arr.length; i++) {
            System.out.println("Element at index " + i + " = " + arr[i]);
            // arr[i] se hum index i wala element access karte hain
        }
    }
}

Time & Space Complexity

ComplexityValueReason
⏱ TimeO(n)n elements hain, sab visit karne padenge
💾 SpaceO(1)Koi extra space nahi

2️⃣ Binary Search — Divide and Conquer Ka Hero

Definition

Sorted array mein kisi element ko dhundne ka fastest tarika. Har step mein array ko half kar deta hai, isliye bahut fast hota hai.

Real Life Example

Dictionary mein “Mango” dhundna — seedha middle se kholo, phir decide karo — aage jaana hai ya peeche. Exactly yahi Binary Search karta hai.

Code with Comments

public class BinarySearch {

    // Method jo search karta hai target ko arr mein
    static int binarySearch(int[] arr, int target) {
        int left = 0;               // Starting index
        int right = arr.length - 1; // Ending index

        while (left <= right) {     // Jab tak search space khatam na ho
            int mid = left + (right - left) / 2; // Middle index — overflow safe formula

            if (arr[mid] == target) {        // Agar middle element hi target hai
                return mid;                  // Index return karo
            } else if (arr[mid] < target) { // Agar target bada hai
                left = mid + 1;              // Left pointer aage badhao
            } else {                         // Agar target chota hai
                right = mid - 1;             // Right pointer peeche lao
            }
        }
        return -1; // Element nahi mila
    }

    public static void main(String[] args) {
        int[] arr = {2, 5, 8, 12, 16, 23, 38, 56}; // Sorted array zaroori hai!
        int result = binarySearch(arr, 23);
        System.out.println("Target found at index: " + result); // Output: 5
    }
}

Time & Space Complexity

ComplexityValueReason
⏱ TimeO(log n)Har step mein search space half hoti hai
💾 SpaceO(1)Koi extra space nahi

3️⃣ Bubble Sort — Simplest Sorting Algorithm

Definition

Adjacent elements ko compare karo, agar galat order mein hain toh swap karo. Baar baar repeat karo jab tak poora array sorted na ho jaye.

Real Life Example

Jaise height ke hisaab se line mein arrange karna — baar baar adjacent logo ko compare karo aur adjust karo. Sab se lamba insaan aakhir mein chala jaata hai — exactly bubble ki tarah upar aata hai.

Code with Comments

public class BubbleSort {
    static void bubbleSort(int[] arr) {
        int n = arr.length;

        for (int i = 0; i < n - 1; i++) {        // n-1 passes lagte hain
            for (int j = 0; j < n - i - 1; j++) { // End ke sorted elements skip karo
                if (arr[j] > arr[j + 1]) {          // Agar adjacent elements galat order mein hain

                    // Swap karo — classic 3-line swap
                    int temp = arr[j];      // temp mein pehla element save karo
                    arr[j] = arr[j + 1];    // dusra element pehli jagah rakh do
                    arr[j + 1] = temp;      // temp wala element dusri jagah rakh do
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(arr);
        for (int x : arr) System.out.print(x + " "); // Output: 11 12 22 25 34 64 90
    }
}

Time & Space Complexity

ComplexityValueReason
⏱ Time (Worst)O(n²)Nested loops
⏱ Time (Best)O(n)Already sorted array
💾 SpaceO(1)In-place sorting

4️⃣ Selection Sort — Minimum Ko Uski Jagah Bhejo

Definition

Unsorted part mein se minimum element dhundho, aur usse current position pe place karo. Yeh process repeat karo jab tak array sorted na ho.

Code with Comments

public class SelectionSort {
    static void selectionSort(int[] arr) {
        int n = arr.length;

        for (int i = 0; i < n - 1; i++) {     // Har iteration mein ek element sahi jagah aata hai
            int minIdx = i;                     // Assume karo current index minimum hai

            for (int j = i + 1; j < n; j++) { // Baki unsorted elements mein minimum dhundho
                if (arr[j] < arr[minIdx]) {
                    minIdx = j;                 // Naya minimum mila, update karo
                }
            }

            // Minimum ko current position pe swap karo
            int temp = arr[minIdx];
            arr[minIdx] = arr[i];
            arr[i] = temp;
        }
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(n²)
💾 SpaceO(1)

5️⃣ Merge Sort — Divide Karo, Conquer Karo

Definition

Array ko recursively half karte jao jab tak single elements na rahe, phir unhe sorted order mein merge karo. Yeh guaranteed O(n log n) deta hai.

Code with Comments

public class MergeSort {

    static void merge(int[] arr, int left, int mid, int right) {
        int n1 = mid - left + 1;  // Left subarray ka size
        int n2 = right - mid;     // Right subarray ka size

        int[] L = new int[n1];    // Temporary left array
        int[] R = new int[n2];    // Temporary right array

        // Data copy karo temporary arrays mein
        for (int i = 0; i < n1; i++) L[i] = arr[left + i];
        for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];

        int i = 0, j = 0, k = left; // i: left ka pointer, j: right ka pointer, k: main array

        // Dono arrays compare karte hue merge karo
        while (i < n1 && j < n2) {
            if (L[i] <= R[j]) {
                arr[k] = L[i]; // Left wala chota hai, pehle daalo
                i++;
            } else {
                arr[k] = R[j]; // Right wala chota hai, pehle daalo
                j++;
            }
            k++;
        }

        // Jo bache hain unhe copy karo
        while (i < n1) arr[k++] = L[i++];
        while (j < n2) arr[k++] = R[j++];
    }

    static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {               // Base case: single element already sorted hai
            int mid = (left + right) / 2; // Middle point nikalo

            mergeSort(arr, left, mid);       // Left half sort karo (recursion)
            mergeSort(arr, mid + 1, right);  // Right half sort karo (recursion)
            merge(arr, left, mid, right);    // Dono halves merge karo
        }
    }
}

Time & Space Complexity

ComplexityValueReason
⏱ TimeO(n log n)Always — best, worst, average
💾 SpaceO(n)Extra temporary arrays

6️⃣ Stack — Last In, First Out (LIFO)

Definition

Stack ek data structure hai jisme last daala gaya element pehle niklega — LIFO principle. Soch lo plates ki stack — upar wali plate pehle uthegi.

Real Life Example

Browser mein Undo button — last wali action pehle undo hoti hai. Exactly LIFO! Isi tarah function call stack bhi kaam karta hai programming mein.

Code with Comments

import java.util.Stack;

public class StackDemo {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>(); // Stack object create kiya

        stack.push(10); // 10 daala — stack: [10]
        stack.push(20); // 20 daala — stack: [10, 20]
        stack.push(30); // 30 daala — stack: [10, 20, 30]

        System.out.println("Top element: " + stack.peek()); // 30 — hataaya nahi, sirf dekha
        System.out.println("Popped: " + stack.pop());       // 30 nikala — stack: [10, 20]
        System.out.println("Stack size: " + stack.size());  // 2
        System.out.println("Is empty: " + stack.isEmpty()); // false
    }
}

Time & Space Complexity

OperationTime
⏱ Push / Pop / PeekO(1)
💾 SpaceO(n)

7️⃣ Queue — First In, First Out (FIFO)

Definition

Queue mein pehle daala gaya element pehle niklega — FIFO principle. Bilkul waise jaise kisi shop mein line lagti hai.

Code with Comments

import java.util.LinkedList;
import java.util.Queue;

public class QueueDemo {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>(); // Queue interface, LinkedList implementation

        queue.offer(10); // 10 add kiya — queue: [10]
        queue.offer(20); // 20 add kiya — queue: [10, 20]
        queue.offer(30); // 30 add kiya — queue: [10, 20, 30]

        System.out.println("Front: " + queue.peek());    // 10 — pehla element dekho (remove nahi hoga)
        System.out.println("Removed: " + queue.poll());  // 10 nikala — queue: [20, 30]
        System.out.println("Size: " + queue.size());     // 2
    }
}

Time & Space Complexity

OperationTime
⏱ Enqueue / DequeueO(1)
💾 SpaceO(n)

8️⃣ Linked List — Nodes Ki Chain

Definition

Ek linear data structure jisme har node mein do cheezein hoti hain — data aur next node ka address (pointer). Array se alag — memory contiguous nahi hoti.

Real Life Example

Train ke compartments — har compartment agli compartment se connected hai ek chain ki tarah. Pehla compartment engine ke paas hota hai (head node).

Code with Comments

public class LinkedListDemo {

    // Node class — ek single node ka blueprint
    static class Node {
        int data;   // Node mein stored data
        Node next;  // Agla node ka reference (pointer)

        Node(int data) {
            this.data = data;
            this.next = null; // Initially koi agla node nahi hota
        }
    }

    // Traversal — sab nodes ko print karo
    static void printList(Node head) {
        Node current = head;           // Head se start karo
        while (current != null) {      // Jab tak nodes hain, chalte raho
            System.out.print(current.data + " -> "); // Current node ka data print karo
            current = current.next;                    // Agla node jaao
        }
        System.out.println("NULL"); // List khatam
    }

    public static void main(String[] args) {
        Node head = new Node(1);          // Pehla node: 1
        head.next = new Node(2);          // Dusra node: 2
        head.next.next = new Node(3);     // Teesra node: 3

        printList(head); // Output: 1 -> 2 -> 3 -> NULL
    }
}

Time & Space Complexity

OperationTime
⏱ TraversalO(n)
⏱ Insert at HeadO(1)
💾 SpaceO(n)

9️⃣ Recursion — Function Apne Aap Ko Bulata Hai

Definition

Ek function jo khud ko call karta hai kisi badi problem ko chhote subproblems mein todne ke liye. Har recursion mein ek base case hona zaroori hai — warna infinite loop ho jaata hai.

Real Life Example

Socho tum stairs utar rahe ho. “Ek seedha utaro, phir wahi step repeat karo” — yahi recursion hai. Jab ground floor aao (base case), ruk jaao.

Code with Comments

public class Recursion {

    // Factorial: n! = n × (n-1) × (n-2) × ... × 1
    static int factorial(int n) {
        if (n == 0 || n == 1) return 1; // Base case — yahan recursion rukta hai

        return n * factorial(n - 1); // Recursive case — n se chhoti problem solve karo
        // factorial(5) = 5 * factorial(4)
        // factorial(4) = 4 * factorial(3)
        // factorial(3) = 3 * factorial(2)
        // factorial(2) = 2 * factorial(1)
        // factorial(1) = 1 ← BASE CASE — wapas aao
    }

    public static void main(String[] args) {
        System.out.println("5! = " + factorial(5)); // Output: 120
    }
}

Time & Space Complexity

ComplexityValueReason
⏱ TimeO(n)n recursive calls hote hain
💾 SpaceO(n)Call stack mein n frames hoti hain

🔟 Two Pointer Technique — Smart Searching

Definition

Do pointers use karo — ek start se, ek end se — aur conditions ke hisaab se move karo. Yeh technique often O(n²) ko O(n) mein convert kar deti hai!

Code with Comments (Pair with Given Sum in Sorted Array)

public class TwoPointer {

    static boolean hasPairWithSum(int[] arr, int target) {
        int left = 0;               // Left pointer — start se
        int right = arr.length - 1; // Right pointer — end se

        while (left < right) {      // Jab tak dono pointers mile nahi
            int sum = arr[left] + arr[right]; // Dono ka sum nikalo

            if (sum == target) return true;   // ✅ Target mil gaya!
            else if (sum < target) left++;    // Sum chota hai, left badhao (bada number chahiye)
            else right--;                     // Sum bada hai, right ghatao (chota number chahiye)
        }
        return false; // Koi pair nahi mila
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9, 11};
        System.out.println(hasPairWithSum(arr, 12)); // true (1+11 ya 5+7)
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(n)
💾 SpaceO(1)

1️⃣1️⃣ Sliding Window — Window Khiskaate Raho

Definition

Ek fixed ya variable size ki window array mein slide karo. Sub-array ya substring related problems ke liye best technique hai. New element add karo, old element hatao.

Code with Comments (Maximum Sum of K Consecutive Elements)

public class SlidingWindow {

    static int maxSumSubarray(int[] arr, int k) {
        int windowSum = 0;

        // Step 1: Pehli window ka sum nikalo (index 0 to k-1)
        for (int i = 0; i < k; i++) {
            windowSum += arr[i];
        }

        int maxSum = windowSum; // Pehli window ko abhi tak ka maximum maano

        // Step 2: Window slide karo — ek element add karo, ek hatao
        for (int i = k; i < arr.length; i++) {
            windowSum += arr[i];     // Naaya element (window ke right side) add karo
            windowSum -= arr[i - k]; // Purana element (window ke left side) hatao
            maxSum = Math.max(maxSum, windowSum); // Maximum update karo
        }

        return maxSum;
    }

    public static void main(String[] args) {
        int[] arr = {2, 1, 5, 1, 3, 2};
        System.out.println(maxSumSubarray(arr, 3)); // Output: 9 (5+1+3)
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(n)
💾 SpaceO(1)

1️⃣2️⃣ HashMap — O(1) Mein Dhundho

Definition

Key-Value pairs mein data store karta hai. Lookup, insert, delete — sab O(1) average time mein. Interview ka sabse frequently used data structure!

Code with Comments (Word Frequency Count)

import java.util.HashMap;

public class HashMapDemo {
    public static void main(String[] args) {
        String[] words = {"apple", "banana", "apple", "cherry", "banana", "apple"};

        HashMap<String, Integer> freq = new HashMap<>(); // Key: word, Value: count

        for (String word : words) {
            // getOrDefault: agar key hai toh existing value lo, nahi hai toh 0 lo
            // Phir usme 1 add karke wapas put karo
            freq.put(word, freq.getOrDefault(word, 0) + 1);
        }

        // Result print karo
        for (String key : freq.keySet()) {
            System.out.println(key + " aayi = " + freq.get(key) + " baar");
        }
        // Output: apple->3, banana->2, cherry->1
    }
}

Time & Space Complexity

OperationAverageWorst
⏱ Get / PutO(1)O(n)
💾 SpaceO(n)O(n)

1️⃣3️⃣ Quick Sort — Pivot Se Sort Karo

Definition

Ek pivot choose karo. Pivot se chote elements left mein, bade elements right mein place karo. Recursively repeat karo. Average case mein O(n log n) — industry mein bahut use hota hai.

Code with Comments

public class QuickSort {

    // Partition — pivot ko uski sahi jagah rakho
    static int partition(int[] arr, int low, int high) {
        int pivot = arr[high]; // Last element ko pivot choose kiya
        int i = low - 1;       // Smaller elements ka boundary

        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) { // Agar current element pivot se chota ya equal hai
                i++;               // Boundary badhao
                // arr[i] aur arr[j] swap karo
                int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
            }
        }

        // Pivot ko uski sahi jagah (i+1) pe rakh do
        int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp;
        return i + 1; // Pivot ka final index return karo
    }

    static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high); // Pivot sahi jagah gaya

            quickSort(arr, low, pi - 1);  // Left side (pivot se pehle) sort karo
            quickSort(arr, pi + 1, high); // Right side (pivot ke baad) sort karo
        }
    }
}

Time & Space Complexity

CaseTime
⏱ AverageO(n log n)
⏱ WorstO(n²) — already sorted array
💾 SpaceO(log n) — recursive stack

1️⃣4️⃣ Binary Tree — Inorder Traversal

Definition

Binary Tree ek non-linear structure hai jisme har node ke max 2 children hote hain. Inorder traversal: Left → Root → Right. BST mein yeh sorted order deta hai.

Code with Comments

public class InorderTraversal {

    // TreeNode — ek single node ka blueprint
    static class TreeNode {
        int val;
        TreeNode left, right; // Left aur Right children

        TreeNode(int val) { this.val = val; }
    }

    // Inorder: Left → Root → Right
    static void inorder(TreeNode root) {
        if (root == null) return;        // Base case: null node — wapas aao

        inorder(root.left);              // Step 1: Pehle left subtree explore karo
        System.out.print(root.val + " "); // Step 2: Root print karo
        inorder(root.right);             // Step 3: Phir right subtree explore karo
    }

    public static void main(String[] args) {
        //       4
        //      / \
        //     2   6
        //    / \
        //   1   3
        TreeNode root = new TreeNode(4);
        root.left = new TreeNode(2);
        root.right = new TreeNode(6);
        root.left.left = new TreeNode(1);
        root.left.right = new TreeNode(3);

        inorder(root); // Output: 1 2 3 4 6 (sorted order!)
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(n) — har node ek baar visit
💾 SpaceO(h) — h = tree ki height

1️⃣5️⃣ BFS — Level By Level Graph Traverse Karo

Definition

Breadth First Search — Queue use karke graph ya tree ko level by level traverse karo. Shortest path problems ke liye use hota hai.

Code with Comments

import java.util.*;

public class BFS {
    static void bfs(int start, List<List<Integer>> graph) {
        boolean[] visited = new boolean[graph.size()]; // Visited array — dobara visit avoid karo
        Queue<Integer> queue = new LinkedList<>();     // BFS ke liye queue use hota hai

        queue.offer(start);      // Starting node queue mein daalo
        visited[start] = true;   // Starting node visited mark karo

        while (!queue.isEmpty()) {          // Jab tak queue mein nodes hain
            int node = queue.poll();        // Front element nikalo
            System.out.print(node + " ");   // Visit karo (print karo)

            for (int neighbor : graph.get(node)) { // Saare neighbors check karo
                if (!visited[neighbor]) {            // Agar visit nahi kiya
                    queue.offer(neighbor);            // Queue mein daalo future visit ke liye
                    visited[neighbor] = true;         // Abhi se visited mark karo
                }
            }
        }
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(V + E) — V vertices, E edges
💾 SpaceO(V)

1️⃣6️⃣ DFS — Depth Mein Jaao, Phir Wapas Aao

Definition

Depth First Search — Recursion ya stack use karke ek path pe jitna ho sake utna deep jaao, phir backtrack karo. Maze problems, cycle detection ke liye perfect.

Code with Comments

public class DFS {

    static void dfs(int node, boolean[] visited, List<List<Integer>> graph) {
        visited[node] = true;              // Current node ko visited mark karo
        System.out.print(node + " ");      // Visit karo (print karo)

        // Saare unvisited neighbors pe recursively DFS karo
        for (int neighbor : graph.get(node)) {
            if (!visited[neighbor]) {
                dfs(neighbor, visited, graph); // Recursion — depth mein jaao
            }
        }
        // Jab koi unvisited neighbor nahi — automatically backtrack hota hai
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(V + E)
💾 SpaceO(V) — recursive stack

1️⃣7️⃣ Dynamic Programming — Subproblems Yaad Rakho

Definition

DP mein hum overlapping subproblems ko solve karte hain aur unke results store kar lete hain — taaki dobara calculate na karna pade. Recursion + Memory = DP.

Real Life Example

Jaise exam mein ek question baar baar aata hai — pehli baar solve karo, answers yaad rakho. Dobara same question aaye toh seedha answer bolo. Yahi memoization hai!

Code with Comments (Fibonacci — Tabulation / Bottom-Up)

public class DPFibonacci {

    static int fib(int n) {
        if (n <= 1) return n; // Base cases: fib(0)=0, fib(1)=1

        int[] dp = new int[n + 1]; // dp array — har value store karne ke liye
        dp[0] = 0;   // Base case
        dp[1] = 1;   // Base case

        for (int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2]; // Previous do values ka sum
            // Dobara calculate nahi karna — already dp mein stored hai!
        }

        return dp[n]; // n-waan Fibonacci number
    }

    public static void main(String[] args) {
        System.out.println("fib(10) = " + fib(10)); // Output: 55
    }
}

Time & Space Complexity

ComplexityValueVs Plain Recursion
⏱ TimeO(n)Plain recursion O(2ⁿ) hota
💾 SpaceO(n)dp array ke liye

1️⃣8️⃣ Insertion Sort — Playing Cards Ki Tarah

Definition

Jaise tum cards ko haath mein sort karte ho — ek ek card uthao aur sahi jagah insert karo. Small arrays ke liye efficient hota hai.

Code with Comments

public class InsertionSort {
    static void insertionSort(int[] arr) {
        int n = arr.length;

        for (int i = 1; i < n; i++) {       // Index 1 se start (0 already sorted consider karo)
            int key = arr[i];               // Current element jo apni sahi jagah dhundh raha hai
            int j = i - 1;                  // Sorted portion ka last index

            // Key se bade elements ko ek jagah right mein shift karo
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j]; // Element ek position right shift karo
                j--;                 // Aage check karo
            }

            arr[j + 1] = key; // Key ko uski sahi jagah rakh do
        }
    }
}

Time & Space Complexity

CaseTime
⏱ Best (sorted)O(n)
⏱ WorstO(n²)
💾 SpaceO(1)

1️⃣9️⃣ String Reversal — Classic Interview Question

Definition

String ko reverse karna — Two Pointer technique ka best use case. Left aur right se simultaneously aao, characters swap karo.

Code with Comments

public class StringReversal {

    static String reverse(String str) {
        char[] chars = str.toCharArray(); // String ko character array mein convert karo
        int left = 0;                     // Left pointer — string ke start se
        int right = chars.length - 1;    // Right pointer — string ke end se

        while (left < right) {            // Jab tak center tak nahi aate

            // Left aur right characters swap karo
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;

            left++;  // Left pointer aage badhao
            right--; // Right pointer peeche lao
        }

        return new String(chars); // Character array wapas String mein convert karo
    }

    public static void main(String[] args) {
        System.out.println(reverse("sandeepstudy")); // Output: ydutspeednas
        System.out.println(reverse("hello"));        // Output: olleh
    }
}

Time & Space Complexity

ComplexityValue
⏱ TimeO(n)
💾 SpaceO(n) — char array

2️⃣0️⃣ Kadane’s Algorithm — Maximum Subarray Sum

Definition

Array mein maximum sum wali contiguous subarray dhundne ka O(n) solution. Dynamic Programming ka classic example. Interview mein bahut poochha jaata hai!

Code with Comments

public class KadaneAlgorithm {

    static int maxSubarraySum(int[] arr) {
        int maxSoFar = arr[0];    // Global maximum — answer yahan track hoga
        int currentMax = arr[0];  // Current subarray ka running sum

        for (int i = 1; i < arr.length; i++) {

            // Do options hain:
            // 1. Current element se nayi subarray shuru karo
            // 2. Current element ko previous subarray mein add karo
            // — Jo bhi bada ho, woh lo!
            currentMax = Math.max(arr[i], currentMax + arr[i]);

            // Global maximum update karo
            maxSoFar = Math.max(maxSoFar, currentMax);
        }

        return maxSoFar; // Maximum subarray sum return karo
    }

    public static void main(String[] args) {
        int[] arr = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
        System.out.println("Max Subarray Sum: " + maxSubarraySum(arr));
        // Output: 6 (subarray: [4, -1, 2, 1])
    }
}

Time & Space Complexity

ComplexityValueWhy Best?
⏱ TimeO(n)Single loop — ek baar array traverse
💾 SpaceO(1)Sirf 2 variables use kiye

📊 Quick Revision Table — Exam Se Pehle Dekho

#Concept⏱ Time Complexity💾 Space Complexity
1Array TraversalO(n)O(1)
2Binary SearchO(log n)O(1)
3Bubble SortO(n²)O(1)
4Selection SortO(n²)O(1)
5Merge SortO(n log n)O(n)
6Stack (Push/Pop)O(1)O(n)
7Queue (Enq/Deq)O(1)O(n)
8Linked List TraversalO(n)O(n)
9Recursion (Factorial)O(n)O(n)
10Two PointerO(n)O(1)
11Sliding WindowO(n)O(1)
12HashMap (Get/Put)O(1) avgO(n)
13Quick SortO(n log n) avgO(log n)
14Tree InorderO(n)O(h)
15BFSO(V+E)O(V)
16DFSO(V+E)O(V)
17DP (Fibonacci)O(n)O(n)
18Insertion SortO(n²) worstO(1)
19String ReversalO(n)O(n)
20Kadane’s AlgorithmO(n)O(1)

Interview Mein Kya Bolein? (Simple Script Answers)

Q: Binary Search ki time complexity kya hai aur kab use karte hain?

Answer: Binary Search O(log n) time mein kaam karta hai kyunki har step mein search space half ho jaati hai. Yeh sirf sorted arrays pe kaam karta hai. Space complexity O(1) hai iterative approach mein.

Q: Stack aur Queue mein kya difference hai?

Answer: Stack LIFO follow karta hai — Last In First Out. Queue FIFO follow karta hai — First In First Out. Stack browser undo, function call stack ke liye use hota hai. Queue task scheduling, BFS ke liye use hota hai.

Q: DP aur Simple Recursion mein difference kya hai?

Answer: Plain recursion mein same subproblems baar baar solve hote hain — jaise fibonacci mein fib(3) kaafi baar calculate hota hai. DP mein hum results store kar lete hain — memoization ya tabulation se — isliye time drastically reduce hoti hai. Fibonacci recursion O(2ⁿ) se O(n) ban jaata hai.

Q: Merge Sort aur Quick Sort mein kaun better hai?

Answer: Merge Sort stable hai aur always O(n log n) guaranteed deta hai, lekin extra O(n) space chahiye. Quick Sort average mein O(n log n) deta hai aur in-place hai O(log n) space mein — lekin worst case O(n²) ho sakta hai. Practical use mein Quick Sort faster hota hai cache performance ki wajah se.


Conclusion — Ab Kya Karein?

Bhai, DSA ek din mein nahi seekha jaata — aur yeh bolne wala koi bhi jhooth bol raha hai.

Lekin agar tum consistently practice karo — ek concept ek din — toh 20 din mein tum ek alag hi level pe honge. Tumhara resume, tumhara confidence, tumhara code — sab improve hoga.

Mera Suggestion — Next Steps:

  • 📌 Har concept ko code karke dekho — sirf padhna kaafi nahi
  • 📌 LeetCode pe Easy problems se shuru karo
  • 📌 Har problem ke baad apne aap se pucho — “Kya better approach ho sakta tha?”
  • 📌 Yeh blog bookmark karo aur revision ke liye wapas aao 😊
  • 📌 Comment mein batao — konsa concept sabse confusing laga? Main uske upar dedicated blog likhta hoon!

🙏 Thanks & Ek Chhoti Si Motivation

Itna lamba blog padhne ke liye dil se shukriya! 🙏 Yeh blog tumhare kaam aaya toh apne dosto ke saath share karo — kyunki knowledge share karne se badhta hai, ghatta nahi.

Aur yaad rakhna —

“DSA mein struggle normal hai. Jo ruka nahi, woh successful hua. Tum already sahi raaste pe ho — bas code karte raho.” 💪

Tum ek BTech graduate ho — tumhare andar already bahut kuch hai. Sirf ek cheez chahiye — consistency. Ek ek step, ek ek concept, ek ek problem. Ek din tum khud interview loge — tab yeh blog yaad aayega. 😄

sandeepstudy.com pe aate raho — next blog mein hum aur deeper jaayenge. Subscribe karo, notification on karo, aur neeche comment drop karo ki konsa topic next chahiye! ⬇️🔔

— Sandeep Study | Sikhte Raho, Badhte Raho

Join WhatsApp

Join Now

Join Telegram

Join Now

Leave a Comment