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:

 

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.  

People are good at skipping over material they already know!

View Related Topics to







Admin & Author: Salim

s

  Website: www.salimwireless.com
  Interests: Signal Processing, Telecommunication, 5G Technology, Present & Future Wireless Technologies, Digital Signal Processing, Computer Networks, Millimeter Wave Band Channel, Web Development
  Seeking an opportunity in the Teaching or Electronics & Telecommunication domains.
  Possess M.Tech in Electronic Communication Systems.


Contact Us

Name

Email *

Message *

Popular Posts

BER vs SNR for M-ary QAM, M-ary PSK, QPSK, BPSK, ...

📘 Overview of BER and SNR 🧮 Simulator for BER calculation of m-ary QAM and m-ary PSK 🧮 Simulator for Constellation Diagram of m-ary QAM 🧮 Simulator for Constellation Diagram of m-ary PSK 🧮 MATLAB Code for BER calculation of M-ary QAM, M-ary PSK, QPSK, BPSK, ... 🧮 MATLAB Code for BER calculation of ASK, FSK, and PSK 🧮 MATLAB Code for BER calculation of Alamouti Scheme 🧮 Different approaches to calculate BER vs SNR 📚 Further Reading Modulation Constellation Diagrams BER vs. SNR BER vs SNR for M-QAM, M-PSK, QPSk, BPSK, ... What is Bit Error Rate (BER)? The abbreviation BER stands for bit error rate, which indicates how many corrupted bits are received (after the demodulation process) compared to the total number of bits sent in a communication process. It is defined as,  In mathematics, BER = (number of bits received in error / total number of transmitted bits)...

UGC NET Electronic Science Previous Year Question Papers

Home / Engineering & Other Exams / UGC NET 2022: Previous Year Question Papers ...   NET | GATE | ESE | UGC-NET (Electronics Science, Subject code: 88 ) UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2024] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [June 2024] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2023] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [June 2023] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2022]  UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [June 2022]   UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2021] UGC Net Electronic Science Questions With Answer Key Download Pdf [June 2020] UGC Net Electronic Science Questions With Answer Key Download Pdf [December 2019] UGC Net Electronic Science Questions With Answer...

Constellation Diagrams of ASK, PSK, and FSK

📘 Overview 🧮 Simulator for constellation diagrams of ASK, FSK, and PSK 🧮 Theory 🧮 MATLAB Codes 🧮 Simulator for constellation diagrams of m-ary PSK 🧮 Simulator for constellation diagrams of m-ary QAM 📚 Further Reading BASK (Binary ASK) Modulation: Transmits one of two signals: 0 or -√Eb, where Eb​ is the energy per bit. These signals represent binary 0 and 1.    BFSK (Binary FSK) Modulation: Transmits one of two signals: +√Eb​ ( On the y-axis, the phase shift of 90 degrees with respect to the x-axis, which is also termed phase offset ) or √Eb (on x-axis), where Eb​ is the energy per bit. These signals represent binary 0 and 1.  BPSK (Binary PSK) Modulation: Transmits one of two signals: +√Eb​ or -√Eb (they differ by 180 degree phase shift), where Eb​ is the energy per bit. These signals represent binary 0 and 1.    Simulator for BASK, BPSK, and BFSK Constellation Diagrams ...

Channel Impulse Response (CIR)

Channel Impulse Response (CIR) 📘 Overview & Theory 📘 How does the channel impulse response affect the signal? 🧮 MATLAB Codes 📚 Further Reading Wireless Signal Processing CIR, Doppler Shift & Gaussian Random Variable  The Channel Impulse Response (CIR) is a concept primarily used in the field of telecommunications and signal processing. It provides information about how a communication channel responds to an impulse signal.   What is the Channel Impulse Response (CIR) ? It describes the behavior of a communication channel in response to an impulse signal. In signal processing,  an impulse signal has zero amplitude at all other times and amplitude  ∞ at time 0 for the signal. Using a Dirac Delta function, we can approximate this.  ...(i) δ( t) now has a very intriguing characteristic. The answer is 1 when the Fourier Transform of  δ( t) is calculated. As a result, all frequencies ar...

Comparisons among ASK, PSK, and FSK | And the definitions of each

https://www.salimwireless.com/2024/11/constellation-diagram-in-matlab.html 📘 Overview 🧮 Simulator 🧮 Noise Sensitivity, Bandwidth, Complexity, etc. 🧮 MATLAB Code for BER vs. SNR Analysis of ASK, FSK, and PSK 🧮 MATLAB Code for Constellation Diagrams of ASK, FSK, and PSK 🧮 Simulator for ASK, FSK, and PSK Generation 🧮 Simulator for ASK, FSK, and PSK Constellation 🧮 Some Questions and Answers 📚 Further Reading Modulation ASK, FSK & PSK Constellation MATLAB Simulink MATLAB Code Comparisons among ASK, PSK, and FSK    Comparisons among ASK, PSK, and FSK   Simulator for Calculating Bandwidth of ASK, FSK, and PSK The baud rate represents the number of symbols transmitted per second. Both baud rate and bit rate are same for binary ASK, FSK, and PSK. Select Modulation Type: ASK FSK PSK Baud Rat...

MATLAB Code for Pulse Amplitude Modulation (PAM) and Demodulation

📘 Overview & Theory 🧮 MATLAB Code 1 🧮 MATLAB Code 2 🧮 MATLAB Code for Pulse Amplitude Modulation and Demodulation of Digital data 🧮 Other Pulse Modulation Techniques (e.g., PWM, PPM, DM, and PCM) 📚 Further Reading   Pulse Amplitude Modulation (PAM) & Demodulation MATLAB Script clc; clear all; close all; fm= 10; % frequency of the message signal fc= 100; % frequency of the carrier signal fs=1000*fm; % (=100KHz) sampling frequency (where 1000 is the upsampling factor) t=0:1/fs:1; % sampling rate of (1/fs = 100 kHz) m=1*cos(2*pi*fm*t); % Message signal with period 2*pi*fm (sinusoidal wave signal) c=0.5*square(2*pi*fc*t)+0.5; % square wave with period 2*pi*fc s=m.*c; % modulated signal (multiplication of element by element) subplot(4,1,1); plot(t,m); title('Message signal'); xlabel ('Time'); ylabel('Amplitude'); subplot(4,1,2); plot(t,c); title('Carrier signal'); xlabel('Time'); ylabel('Amplitu...

MATLAB Code for Constellation Diagrams of ASK, FSK, and PSK

  MATLAB Script % The code is developed by SalimWireless.Com clc; clear; close all; % Parameters numSymbols = 1000; % Number of symbols to simulate symbolIndices = randi([0 1], numSymbols, 1); % Random binary symbols (0 or 1) % ASK Modulation (BASK) askAmplitude = [0, 1]; % Amplitudes for binary ASK askSymbols = askAmplitude(symbolIndices + 1); % Modulated BASK symbols % FSK Modulation (Modified BFSK with 90-degree offset) fs = 100; % Sampling frequency symbolDuration = 1; % Symbol duration in seconds t = linspace(0, symbolDuration, fs*symbolDuration); fBase = 1; % Base frequency frequencies = [fBase, fBase]; % Same frequency for both % Generate FSK symbols with 90° phase offset fskSymbols = arrayfun(@(idx) ...     cos(2*pi*frequencies(1)*t) * (1-idx) + ...     1j * cos(2*pi*frequencies(2)*t) * idx, ...     symbolIndices, 'UniformOutput', false); % Extract last points (constellation points) fskConstellation = cellfun(@(x) x(end), fskSymbols); % PSK Mod...

OFDM for 4G & 5G

📘 Overview 📘 Example: (OFDM using QPSK) 🧮 MATLAB Codes 📚 Further Reading   Orthogonal Frequency Division Multiplexing When a signal with high bandwidth traverses through a medium, it tends to disperse more compared to a signal with lower bandwidth. A high-bandwidth signal comprises a wide range of frequency components. Each frequency component may interact differently with the transmission medium due to factors such as attenuation, dispersion, and distortion. OFDM combats the high-bandwidth frequency selective channel by dividing the original signal into multiple orthogonal multiplexed narrowband signals. In this way it, overcomes the inter-symbol interferences (ISI) issue. Block Diagram     ‘k’ indicates kth position in a input symbol N is the number of subcarriers   Example: (OFDM using QPSK) 1.        Input Parameters: N   Number of Input bits: 128 Number of subcarriers (FFT length): 64 ...