20 Pseudo Code Questions and Answers

Meenakshi Agarwal
By
Meenakshi Agarwal
Hi, I'm Meenakshi Agarwal. I have a Bachelor's degree in Computer Science and a Master's degree in Computer Applications. After spending over a decade in large...
19 Min Read

Welcome to an advanced tutorial designed for developers, focusing on challenging algorithmic pseudo-code questions. It doesn’t matter if you are a C#, .NET, Python, C, or Java developer. In this guide, we will explore questions that will push your problem-solving abilities and encourage creative thinking.

We’ve categorized them into four sections: Advanced Logic, Complex String Manipulation, Sophisticated Data Structures, and Algorithmic Brain Teasers. Each section presents five questions, followed by detailed pseudo-code answers.

Also Read: 20 Common .NET Coding Interview Questions with Answers

Brainstorm with 20 Developer Pseudo Code Questions

Let’s dive into 20 thought-provoking Developer Coding Questions that will spark creativity and enhance your problem-solving prowess.

Advanced Logic

Prime Number Checker

Question:
Write code to determine if a given number is a prime number.

In this code, we’re figuring out if a number is prime. We loop up to its square root, checking if it’s divisible by any number. This method helps us quickly determine if a number is prime.

# Answer
is_prime = true
for i from 2 to square_root(num)
  if num is divisible by i
    set is_prime to false
    break
print "Is prime:", is_prime

Greatest Common Divisor

Question:
Create a test code to find the greatest common divisor (GCD) of two numbers.

Here, we’re finding the common factor of two numbers, also known as the Greatest Common Divisor (GCD). We do this by repeatedly swapping and updating remainders until one becomes zero. This clever method ensures we find the GCD efficiently.

# Answer
while num2 not equals 0
  temp = num2
  num2 = num1 % num2
  num1 = temp
print "GCD:", num1

Unique Paths in a Grid

Question:
Write a simple code to calculate the number of unique paths from the top-left corner to the bottom-right corner in a grid, where movement is allowed only right or down.

This code calculates the number of unique paths in a grid. We use dynamic programming, filling a grid with counts of unique paths, considering only right and down movements.

# Answer
initialize a 2D array grid with dimensions rows x columns
for i from 0 to rows-1
  for j from 0 to columns-1
    if i equals 0 or j equals 0
      grid[i][j] = 1
    else
      grid[i][j] = grid[i-1][j] + grid[i][j-1]
print "Unique paths:", grid[rows-1][columns-1]

Subarray Sum Equals K

Question:
Create an algo to determine if there exists a subarray with the sum equal to a given target value K.

Here, we’re creating an algorithm to check if there exists a subarray with the sum equal to a given target value, K. We use a hashmap to keep track of cumulative sums and efficiently find the subarrays.

# Answer
sum_map = {}
current_sum = 0
count = 0
for each element in array
  current_sum += element
  if current_sum equals K
    count += 1
  if (current_sum - K) exists in sum_map
    count += sum_map[current_sum - K]
  increment sum_map[current_sum] by 1
print "Subarrays with sum K:", count

Longest Increasing Subsequence

Question:
Write pseudo code to find the length of the longest increasing subsequence in an array of integers.

In this code, we’re figuring out how long the increasing chain of numbers is in a list. We go through the list, keeping track of the length based on the previous numbers. It’s a cool dynamic programming solution.

# Answer
lis = [1] * length(array)
for i from 1 to length(array)-1
  for j from 0 to i-1
    if array[i] > array[j] and lis[i] < lis[j] + 1
      lis[i] = lis[j] + 1
print "Longest Increasing Subsequence Length:", maximum(lis)

Complex String Manipulation

Regular Expression Matching

Question:
Create a simple code to implement regular expression matching with support for ‘*’ and ‘.’.

This code checks if a string matches a pattern with ” and ‘.’. It cleverly uses a recursive function to handle different cases, focusing on the first character and dealing with ” by calling itself recursively.

# Answer
function is_match(s, p)
  if length(p) equals 0
    return length(s) equals 0
  first_match = (length(s) not equals 0) and (s[0] equals p[0] or p[0] equals '.')
  if length(p) >= 2 and p[1] equals '*'
    return is_match(s, p[2:]) or (first_match and is_match(s[1:], p))
  else
    return first_match and is_match(s[1:], p[1:])

Palindrome Partitioning

Question:
Write an algo to partition a string into palindrome substrings.

In this code, we’re breaking a word into parts that read the same backward and forward. The code does this by checking and storing valid palindrome partitions through a recursive process.

# Answer
function partition_palindromes(s)
  result = []
  backtrack([], s)
  return result

function backtrack(path, s)
  if length(s) equals 0
    result.append(path)
    return
  for i from 1 to length(s)
    if is_palindrome(s[:i])
      backtrack(path + [s[:i]], s[i:])

function is_palindrome(s)
  return s equals reverse_string(s)

Minimum Window Substring

Question:
Create a simple algorithm to find the minimum window in a string that contains all characters of another string.

In this code, we find the minimum window in a string containing all characters of another string. It’s a sliding window approach, where we maintain a character count and adjust the window boundaries.

# Answer
function min_window(s, t)
  char_count = initialize a map with character counts in t
  required_chars = length(char_count)
  left = 0
  right = 0
  formed_chars = 0
  result = ""
  while right < length(s)
    if s[right] in char_count
      char_count[s[right]] -= 1
      if char_count[s[right]] equals 0
        formed_chars += 1
    while formed_chars equals required_chars
      if result equals "" or (right - left + 1) < length(result)
        result = s[left:right+1]
      if s[left] in char_count
        char_count[s[left]] += 1
        if char_count[s[left]] > 0
          formed_chars -= 1
      left += 1
    right += 1
  return result

Longest Common Subsequence

Question:
Write a basic algorithm to find the length of the longest common subsequence of two strings.

Here, we calculate the length of the longest common subsequence between two strings. We use dynamic programming and a 2D array to efficiently find this common sequence.

# Answer
function longest_common_subsequence(s1, s2)
  m = length(s1)
  n = length(s2)
  lcs = initialize a 2D array with dimensions m+1 x n+1
  for i from 0 to m
    for j from 0 to n
      if i equals 0 or j equals 0
        lcs[i][j] = 0
      else if s1[i-1] equals s2[j-1]
        lcs[i][j] = lcs[i-1][j-1] + 1
      else
        lcs[i][j] = maximum(lcs[i-1][j], lcs[i][j-1])
  return lcs[m][n]

KMP String Matching Algorithm

Question:
Provide a working code to implement the Knuth-Morris-Pratt (KMP) string-matching algorithm.

This code implements the Knuth-Morris-Pratt (KMP) string-matching algorithm. We build a prefix table and use it to search for occurrences in a string.

# Answer
function build_kmp_table(pattern)
  table = initialize an array of length pattern
  len = 0
  i = 1
  while i < length(pattern)
    if pattern[i] equals pattern[len]
      len += 1
      table[i] = len
      i += 1
    else
      if len not equals 0
        len = table[len-1]
      else
        table[i] = 0
        i += 1
  return table

function kmp_search(text, pattern)
  m = length(text)
  n = length(pattern)
  lps = build_kmp_table(pattern)


  i = 0
  j = 0
  while i < m
    if pattern[j] equals text[i]
      i += 1
      j += 1
    if j equals n
      print "Pattern found at index:", i-j
      j = lps[j-1]
    else if i < m and pattern[j] not equals text[i]
      if j not equals 0
        j = lps[j-1]
      else
        i += 1

Sophisticated Data Structures

Trie Implementation

Question:
Provide a step-by-step logic to implement a trie data structure.

In this code, we’re setting up a Trie data structure. It includes adding words, searching for complete words, and checking if a word starts with a given prefix. Tries are efficient for storing and retrieving words.

# Answer
class TrieNode
  end = false
  kids = initialize an array of TrieNode

class Trie
  root = TrieNode

  function add(w)
    cur = root
    for c in w
      cur = cur.kids[c] ? cur.kids[c] : (cur.kids[c] = new TrieNode)
    cur.end = true

  function find(w)
    cur = root
    for c in w
      if not cur.kids[c] return false
      cur = cur.kids[c]
    return cur.end

  function startsWith(pre)
    cur = root
    for c in pre
      if not cur.kids[c] return false
      cur = cur.kids[c]
    return true

Union Find (Disjoint Set) Implementation

Question:
Create pseudo code to implement the Union-Find (Disjoint Set) data structure.

Here, we implement the Union-Find (Disjoint Set) data structure. It includes finding the root of a set and uniting two sets. It’s useful for tasks like connectivity checks.

# Answer
class UnionFind
  parent = initialize an array with each element as its own parent

  function find(x)
    if parent[x] equals x
      return x
    parent[x] = find(parent[x])
    return parent[x]

  function union(x, y)
    root_x = find(x)
    root_y = find(y)
    parent[root_x] = root_y

# Usage Example
uf = new UnionFind
uf.union(1, 2)
uf.union(2, 3)
print "Are 1 and 3 connected?", uf.find(1) equals uf.find(3)

AVL Tree Rotation

Question:
Write a simple logic to perform a right rotation in an AVL tree.

This code performs a right rotation in an AVL tree. AVL trees maintain balance in binary search trees, and rotations help keep them balanced.

# Answer
class TreeNode
  data
  height
  left
  right

function right_rotate(y)
  x = y.left
  T = x.right

  x.right = y
  y.left = T

  y.height = maximum(height(y.left), height(y.right)) + 1
  x.height = maximum(height(x.left), height(x.right)) + 1

  return x

Priority Queue Implementation

Question:
Create pseudo code to implement a priority queue using a binary heap.

In this code, we create a Priority Queue using a binary heap. It allows efficient insertion and removal of elements based on their priority. Priority queues are handy in various algorithms.

# Answer
class PriorityQueue
  heap = []

  function push(value)
    append value to heap
    index = length(heap) - 1
    while index > 0
      parent_index = (index - 1) / 2
      if heap[index] < heap[parent_index]
        swap heap[index] and heap[parent_index]
        index = parent_index
      else
        break

  function pop()
    if length(heap) equals 0
      return "Priority Queue is empty"
    if length(heap) equals 1
      return pop element from heap
    root = heap[0]
    heap[0] = remove last element from heap
    index = 0
    while true
      left_child = 2 * index + 1
      right_child = 2 * index + 2
      min_index = index
      if left_child < length(heap) and heap[left_child] < heap[min_index]
        min_index = left_child
      if right_child < length(heap) and heap[right_child] < heap[min_index]
        min_index = right_child
      if min_index not equals index
        swap heap[index] and heap[min_index]
        index = min_index
      else
        break
    return root

Graph Representation (Adjacency List)

Question:
How to represent an undirected graph using an adjacency list.

This code represents an undirected graph using an adjacency list. It demonstrates adding vertices, and edges and provides a basic structure for graph-related algorithms.

# Answer
class Graph
  vertices = initialize an empty dictionary

  function add_vertex(vertex)
    if vertex not in vertices
      vertices[vertex] = []

  function add_edge(vertex1, vertex2)
    vertices[vertex1].append(vertex2)
    vertices[vertex2].append(vertex1)

Algorithmic Brain Teasers

Trapping Rain Water

Question:
Create a pseudo code to find the amount of water that can be trapped between given heights.

Here, we find the amount of water that can be trapped between given heights. The code uses a stack to keep track of potential boundaries for trapping water, solving a common algorithmic problem.

function trap(height)
  stack = []
  waterTrapped = 0

  for currentIdx from 0 to length(height) - 1
    while length(stack) > 0 and height[currentIdx] > height[stack[top(stack)]]
      topIdx = stack.pop()
      if length(stack) = 0
        break
      distance = currentIdx - stack[top(stack)] - 1
      minHeight = minimum(height[currentIdx], height[stack[top(stack)]]) - height[topIdx]
      waterTrapped += distance * minHeight

    stack.push(currentIdx)

  return waterTrapped

function top(stack)
  return length(stack) - 1

Hamiltonian Cycle

Question:
Provide the logic to find a Hamiltonian Cycle in a given undirected graph.

In this code, we explore finding a Hamiltonian Cycle in a given undirected graph. The code uses backtracking to search for a cycle that visits each vertex exactly once.

# Answer
function hamiltonian_cycle(graph)
  path = []
  visited = initialize a set of visited vertices
  path.append(starting_vertex)
  visited.add(starting_vertex)
  if hamiltonian_util(graph, path, visited)
    print "Hamiltonian Cycle:", path
  else
    print "No Hamiltonian Cycle"

function hamiltonian_util(graph, path, visited)
  if length(path) equals number_of_vertices_in_graph
    return graph[path[-1]] contains path[0]
  for each neighbor in graph[path[-1]]
    if neighbor not in visited
      path.append(neighbor)
      visited.add(neighbor)
      if hamiltonian_util(graph, path, visited)
        return true
      path.pop()
      visited.remove(neighbor)
  return false

Dijkstra’s Shortest Path

Question:
Create pseudo code to find the shortest path in a weighted graph using Dijkstra’s algorithm.

In this code, we’re using Dijkstra’s algorithm to discover the quickest route in a graph with different path lengths. The code smartly explores and updates the shortest distances starting from a specific point.

# Answer
function dijkstra(graph, start)
  distances = initialize a map with infinite distances for all vertices
  distances[start] = 0
  priority_queue = create a priority queue with vertices and their distances
  priority_queue.push((0, start))
  while priority_queue not empty
    current_distance, current_vertex = priority_queue.pop()
    if current_distance > distances[current_vertex]
      continue
    for neighbor, weight in graph[current_vertex]
      distance = current_distance + weight
      if distance < distances[neighbor]
        distances[neighbor] = distance
        priority_queue.push((distance, neighbor))
  return distances

Traveling

Salesman Problem
Question:
Provide an algo to solve the Traveling Salesman Problem using dynamic programming.

This algorithm tackles the Traveling Salesman Problem using dynamic programming. It efficiently explores all possible paths to find the shortest tour that visits each city exactly once.

# Answer
function tsp(graph, start)
  n = number_of_vertices_in_graph
  all_sets = 2^n
  memo = initialize a memoization table with dimensions n x all_sets
  return tsp_util(graph, start, 1, memo)

function tsp_util(graph, current, mask, memo)
  if mask equals (1 << n) - 1
    return graph[current][start]
  if memo[current][mask] not equals undefined
    return memo[current][mask]
  result = infinity
  for next_vertex in range(n)
    if (mask >> next_vertex) and 1 equals 0
      continue
    result = minimum(result, graph[current][next_vertex] + tsp_util(graph, next_vertex, mask | (1 << next_vertex), memo))
  memo[current][mask] = result
  return result

Sudoku Solver

Question:
Create pseudo code to solve a Sudoku puzzle.

In this code, we’re solving a Sudoku puzzle by filling in the empty spaces. The algorithm works efficiently, making sure that every row, column, and small box has numbers from 1 to 9 without repeating.

# Answer
function solve_sudoku(board)
  empty_cell = find_empty_cell(board)
  if not empty_cell
    return true
  row, col = empty_cell
  for num in range(1, 10)
    if is_safe(board, row, col, num)
      board[row][col] = num
      if solve_sudoku(board)
        return true
      board[row][col] = 0
  return false

function is_safe(board, row, col, num)
  return not in_row(board, row, num) and not in_col(board, col, num) and not in_box(board, row - row % 3, col - col % 3, num)

function in_row(board, row, num)
  return num in board[row]

function in_col(board, col, num)
  return num in [board[i][col] for i in range(9)]

function in_box(board, start_row, start_col, num)
  return num in [board[start_row + i][start_col + j] for i in range(3) for j in range(3)]

Conclusion – 20 Pseudo Code Questions With Answers

Congratulations on completing the challenging developer algorithmic problems. These advanced problems were designed to stimulate your problem-solving skills and enhance your ability to think algorithmically.

Practice these exercises to strengthen your proficiency. It will enable you to approach complex coding challenges with confidence.

Lastly, our site needs your support to remain free. Share this post on social media (Linkedin/Twitter) if you gained some knowledge from this tutorial.

Enjoy coding,
TechBeamers.

Share This Article
Leave a Comment

Leave a Reply

Your email address will not be published. Required fields are marked *