Skip to main content

Python DSA Cheat Sheet


 

Binary Search 

arr = [10, 3, 5, 7]
target = 3

# Store original indices with values
indexed_arr = list(enumerate(arr))  # [(0, 10), (1, 3), (2, 5), (3, 7)]

# Sort by value
indexed_arr.sort(key=lambda x: x[1])  # [(1, 3), (2, 5), (3, 7), (0, 10)]

def binary_search_with_original_index(arr, target):
    left = 0
    right = len(arr) - 1

    while left <= right:
        mid = (left + right) // 2
        if arr[mid][1] == target:
            return arr[mid][0]  # Return original index
        elif arr[mid][1] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

print("Original index of 3:", binary_search_with_original_index(indexed_arr, 3))

 

 Output

Original index of 3: 1 

 

Two-, Three-, or Four-Pointer Sum and So On

Two pointer sum 

arr = [10, 3, 5, 7]
target = 8
arr.sort()
def has_two_elements_with_sum(arr, target):
    left = 0
    right = len(arr) - 1
        
    for i in range(len(arr)-1):
        while left < right:
            sum = arr[left] + arr[right]
            if sum == target:
                return True
            elif sum < target:
                left += 1
            else:
                right -= 1
    return False

print(has_two_elements_with_sum(arr, 8))

Output

True 
 

 Three Pointer Sum

arr = [10, 3, 5, 7]
target = 15
arr.sort()
def has_three_elements_with_sum(arr, target):

    for i in range(len(arr)-2):
        a = arr[i]
        left = i + 1
        right = len(arr) - 1
        while left < right:
            sum = a + arr[left] + arr[right]
            if sum == target:
                return True
            elif sum < target:
                left += 1
            else:
                right -= 1
    return False

print(has_three_elements_with_sum(arr, 15)) 

Output

 True
 

Sliding Window: Check if any contiguous subarray of length 2, 3, and 4 sums to target

subarray of length 2 (check if any two numbers sum to target) 

#checking if any subarray of length 2 has a sum equal to target value
def has_pair_with_sum(nums, k, target):
    window_sum = sum(nums[:k])

    for i in range(k, len(nums)):
        window_sum += nums[i] - nums[i - k] 
        if window_sum == target:
            return True
    return False

arr = [1,2,3,4,5];
print("has subarray sum (for k=2):", has_pair_with_sum(arr, 2, 7))
 

output 

has subarray sum (for k=2): True 

 

subarray of length 3 (check if any three numbers sum to target) 

#checking if any subarray of length 3 has a sum equal to target value
def has_pair_with_sum(nums, k, target):
    window_sum = sum(nums[:k])

    for i in range(k, len(nums)):
        window_sum += nums[i] - nums[i - k] 
        if window_sum == target:
            return True
    return False

arr = [1,2,3,4,5];
print("has subarray sum (for k=3):", has_pair_with_sum(arr, 3, 9))
 

Output

 has subarray sum (for k=3): True

 

 

subarray of length 4 (check if any four numbers sum to target) 

# Check if any contiguous subarray of length 4 has a sum equal to the target value
def has_subarray_with_sum(nums, k, target):
    window_sum = sum(nums[:k])

    if window_sum == target:
        return True

    for i in range(k, len(nums)):
        window_sum += nums[i] - nums[i - k]
        if window_sum == target:
            return True
    return False

# Test case
arr = [1, 2, 3, 4, 5]
k = 4
target = 10
print(f"Has subarray of length {k} with sum {target}:", has_subarray_with_sum(arr, k, target))
 

Output

Has subarray of length 4 with sum 10: True

 

Another Code (using non-contiguous k-elements sum) 

from itertools import combinations

def has_k_elements_sum(nums, k, target):
    for combo in combinations(nums, k):
        if sum(combo) == target:
            print(f"Found combination: {combo}")
            return True
    return False

# Example usage:
arr = [1, 2, 3, 4, 5]
k = 3
target = 10
print("Has non-contiguous k-elements sum:", has_k_elements_sum(arr, k, target))
 

 Output

 Found combination: (1, 4, 5)
Has non-contiguous k-elements sum: True

 

Activity Selection Problem using the Greedy algorithm

  Schedule the maximum number of non-overlapping events

 # Activity Selection Problem using Greedy Algorithm
# Objective: Select the maximum number of non-overlapping activities

# Sample list of activity requests, where each tuple is (start_time, end_time)
activity_requests = [
    (1, 3),   # Activity 1
    (2, 4),   # Activity 2
    (3, 5),   # Activity 3
    (0, 6),   # Activity 4
    (5, 7)    # Activity 5
]

# Step 1: Sort the activities by their end time (earliest finishing first)
# Why? Because ending early leaves more room for other activities.
sorted_activities = sorted(activity_requests, key=lambda activity: activity[1])

# Function to select the maximum number of non-overlapping activities
def select_activities_greedily(activities):
    selected_activities = []  # List to store selected activities
    last_activity_end_time = -1  # Initialize end time tracker

    # Step 2: Loop through each sorted activity
    for start_time, end_time in activities:
        # Step 3: Check if the activity starts after or when the last selected one ended
        if start_time >= last_activity_end_time:
            selected_activities.append((start_time, end_time))  # Select it
            last_activity_end_time = end_time  # Update the end time tracker

    return selected_activities

# Get the selected non-overlapping activities
optimal_schedule = select_activities_greedily(sorted_activities)

# Print the result
print("Optimal set of non-overlapping activities:")
for i, (start, end) in enumerate(optimal_schedule, 1): # index starts from 1 instead of 0
    print(f"Activity {i}: Start = {start}, End = {end}")

Output

 Optimal set of non-overlapping activities:
Activity 1: Start = 1, End = 3
Activity 2: Start = 3, End = 5
Activity 3: Start = 5, End = 7

 

Find the minimum number of meeting rooms required so that no meetings overlap 

 # Activity Selection Problem using Greedy Algorithm
# Objective: Select the maximum number of non-overlapping activities

# Sample list of activity requests, where each tuple is (start_time, end_time)
activity_requests = [
    (0, 30),   # Activity 1
    (5, 10),   # Activity 2
    (9, 20)   # Activity 3
]

# Step 1: Sort the activities by their end time (earliest finishing first)
# Why? Because ending early leaves more room for other activities.
sorted_activities = sorted(activity_requests, key=lambda activity: activity[1])

# Function to select the maximum number of non-overlapping activities
def select_activities_greedily(activities):
    number_of_room = 0  # List to store selected activities
    last_activity_end_time = -1  # Initialize end time tracker

    # Step 2: Loop through each sorted activity
    for start_time, end_time in activities:
        # Step 3: Check if the activity starts after or when the last selected one ended
        if start_time >= last_activity_end_time:
            number_of_room = 1
            last_activity_end_time = end_time
        else:
            number_of_room += 1

    return number_of_room

# Get the selected non-overlapping activities
number_of_room = select_activities_greedily(sorted_activities)

# Print the result
print(f"Total number of room required: {number_of_room}")
 

Output 

Total number of room required: 3
  

Further Reading

  1.  


Contact Us

Name

Email *

Message *

Popular Posts

UGC NET Electronic Science Previous Year Question Papers with Solutions

Download Papers and Solutions Exam Pattern Preparation Tips FAQs More Home / Engineering & Other Exams / UGC NET 2026 PYQ ๐Ÿ“Š Exam Highlights: Electronic Science (88) Feature Details Junior Research Fellowship (JRF) ₹37,000 + HRA per month Eligibility M.Sc/M.Tech in Electronics (55%) Validity of Certificate JRF (3 Years) | Lectureship (Lifetime) ๐Ÿ“ฅ Download UGC NET Electronics PDFs Complete collection of previous year question papers, answer keys and explanations for Subject Code 88. Start Downloading ๐Ÿ“‚ View All Question Papers June 2026 - Question Paper Download PDF June 202...

CMOS Logic Gates: Inverter, NAND, and NOR

CMOS Logic Gates: Inverter, NAND, and NOR Complementary metal–oxide–semiconductor (CMOS) technology forms the backbone of modern digital IC design. Patented by Frank Wanlass in 1963 ( US patent 3,356,858 ), CMOS enables low-power, high-speed, and noise-immune logic circuits. CMOS gates, including inverters, NAND, and NOR, are widely used in both large-scale and small-scale integrated circuits due to their efficiency and versatility. CMOS Inverter A CMOS inverter consists of a complementary pair of PMOS and NMOS transistors. The PMOS transistor connects to the supply voltage V DD , while the NMOS connects to ground. The input voltage V IN controls both gates, and the output voltage V OUT is taken from the connected drains. CMOS inverters are highly energy-efficient and produce minimal heat due to their comple...

Coherent vs. Non-Coherent Demodulation

  For demodulation In general: 1. Synchronous (coherent) demodulation Receiver generates a local carrier/oscillator . It combines/multiplies the received signal with that carrier. Then a filter extracts the message. Received signal ↓ × Local oscillator ↓ Low-pass filter ↓ Message So yes, carrier multiplication is a common implementation of synchronous demodulation . 2. Asynchronous (non-coherent) demodulation Receiver doesn't need a phase-synchronized local carrier . It uses properties of the received signal itself to recover the information. For ASK , an envelope detector is the classic example: ASK signal ↓ Diode + RC ↓ Envelope ↓ Comparator ↓ Data Modulation Synchronous demodulation Non-coherent/asynchronous demodulation ASK/OOK Local carrier + multiplier Envelope detector AM Product detector Envelope detector FSK Coherent correlator/mixer Frequency discriminator, filters, etc. PSK Local synchronized carrier + multiplier Differential/n...

Online Simulator for Frequency Modulatiuon and Demodulation

FM Modulation Simulator Frequency Modulation (FM) In Frequency Modulation, the frequency of the carrier signal varies in accordance with the message signal's amplitude. s FM (t) = A c cos(ฯ‰ c t + k f ∫m(t)dt) where ฯ‰ = 2ฯ€f & k f = Frequency Sensitivity Modulation index, ฮฒ = (k f * A m ) / f m Change the parameter values to see the effect. Message Freq (Hz) 1 Carrier Freq (Hz) Message Amplitude (Am) Kf (sensitivity): 50 Perform FM Demodulation ๐Ÿงช Experiment for Students: ...

OFDM Symbols and Subcarriers Explained

This article explains how OFDM (Orthogonal Frequency Division Multiplexing) symbols and subcarriers work. It covers modulation, mapping symbols to subcarriers, subcarrier frequency spacing, IFFT synthesis, cyclic prefix, and transmission. Step 1: Modulation First, modulate the input bitstream. For example, with 16-QAM , each group of 4 bits maps to one QAM symbol. Suppose we generate a sequence of QAM symbols: s0, s1, s2, s3, s4, s5, …, s63 Step 2: Mapping Symbols to Subcarriers Assume N sub = 8 subcarriers. Each OFDM symbol in the frequency domain contains 8 QAM symbols (one per subcarrier): Mapping (example) OFDM symbol 1 → s0, s1, s2, s3, s4, s5, s6, s7 OFDM symbol 2 → s8, s9, s10, s11, s12, s13, s14, s15 … OFDM sym...

(Filters) Free MATLAB alternative for signal analysis

Advanced Signal Filters Upload CSV (1st Col) or Audio (WAV, MP3, etc.) Generate Messy Signal (20Hz + 50Hz + 150Hz) No Operation FFT (Spectrum) Amplitude Modulation (AM) Double Sideband Supressed Carrier (DSBSC) Pulse Amplitude Modulation (PAM) Flat Top PAM Filters - LPF, HPF, BPF, Notch Principal Component Analysis (PCA) Cross Spectrum Filter Type: Signal Cleaner ...

Interactive Sallen-Key filter Simulation (2nd order LPF)

  Sallen-Key Filter Explained: Why It’s the Most Popular Second-Order Low-Pass Filter Sallen-Key Filter Explained: Why It’s the Most Popular Second-Order Low-Pass Filter (With Math) If you're learning analog electronics, active filters, or preparing for engineering interviews and exams, you've probably come across the Sallen-Key filter . But what exactly is it, and why do engineers prefer it over simply cascading RC low-pass filters? Live Interactive Simulator Adjust the component values to see the real-time frequency response (Bode Plot). R1 (kฮฉ): 10 R2 (kฮฉ): 10 C1 (nF): 10 C2 (nF): 10 ...

Online Simulator for ASK, FSK, and PSK Signal Generation

Interactive Digital Signal Processing (DSP) Tutorial and Simulator for ASK, FSK, and BPSK modulation techniques. Try our new Digital Signal Processing Simulator!   •   Interactive ASK, FSK, and BPSK tools updated for 2025. Start Now Digital Modulation Visualizer: ASK, FSK, & BPSK Simulator Learn and visualize binary modulation techniques (ASK, FSK, BPSK) in real-time with adjustable carrier and sampling parameters. Perfect for DSP students and engineers. ๐Ÿ“ก ASK Simulator ๐Ÿ“ถ FSK Simulator ๐ŸŽš️ BPSK Simulator ๐Ÿ“š More Topics ASK Modulator FSK Modulator BPSK Modulator Demodulation More Topics 1. ASK (Ampli...