DEV Community

Cover image for Easy DSA Problems β€” Ruby Solutions..
Brian Kim
Brian Kim

Posted on

Easy DSA Problems β€” Ruby Solutions..

πŸ“ CodeSignal Easy Problems β€” Ruby Solutions


1️⃣ Count Greater Than First

def count_greater_than_first(arr)
  first = arr[0]
  arr.count { |num| num > first }
end
Enter fullscreen mode Exit fullscreen mode

2️⃣ First Duplicate

def first_duplicate(arr)
  seen = {}
  arr.each_with_index do |num, i|
    return num if seen[num]
    seen[num] = true
  end
  -1
end
Enter fullscreen mode Exit fullscreen mode

3️⃣ Longest Substring Without Repeating Characters

def longest_unique_substring(s)
  seen = {}
  left = 0
  max_len = 0

  s.chars.each_with_index do |char, right|
    if seen.key?(char) && seen[char] >= left
      left = seen[char] + 1
    end
    seen[char] = right
    max_len = [max_len, right - left + 1].max
  end

  max_len
end
Enter fullscreen mode Exit fullscreen mode

4️⃣ Maximum Sum Subarray of Size k

def max_subarray_sum(arr, k)
  window_sum = 0
  max_sum = -Float::INFINITY

  arr.each_with_index do |num, i|
    window_sum += num
    if i >= k - 1
      max_sum = [max_sum, window_sum].max
      window_sum -= arr[i - k + 1]
    end
  end

  max_sum
end
Enter fullscreen mode Exit fullscreen mode

5️⃣ Valid Palindrome

def is_palindrome(s)
  left = 0
  right = s.length - 1

  while left < right
    if !s[left].match?(/[a-z0-9]/i)
      left += 1
    elsif !s[right].match?(/[a-z0-9]/i)
      right -= 1
    else
      return false if s[left].downcase != s[right].downcase
      left += 1
      right -= 1
    end
  end

  true
end
Enter fullscreen mode Exit fullscreen mode

6️⃣ Two Sum

def two_sum(nums, target)
  seen = {}

  nums.each_with_index do |num, i|
    complement = target - num
    return [seen[complement], i] if seen.key?(complement)
    seen[num] = i
  end

  []
end
Enter fullscreen mode Exit fullscreen mode

7️⃣ Merge Two Sorted Arrays

def merge_sorted(arr1, arr2)
  merged = []
  i = 0
  j = 0

  while i < arr1.length && j < arr2.length
    if arr1[i] <= arr2[j]
      merged << arr1[i]
      i += 1
    else
      merged << arr2[j]
      j += 1
    end
  end

  merged.concat(arr1[i..-1]) if i < arr1.length
  merged.concat(arr2[j..-1]) if j < arr2.length

  merged
end
Enter fullscreen mode Exit fullscreen mode

8️⃣ Binary Search

def binary_search(arr, target)
  left = 0
  right = arr.length - 1

  while left <= right
    mid = left + (right - left) / 2
    if arr[mid] == target
      return mid
    elsif arr[mid] < target
      left = mid + 1
    else
      right = mid - 1
    end
  end

  -1
end
Enter fullscreen mode Exit fullscreen mode

πŸ”‘ Interview Pattern Tips

  • Hash β†’ first duplicate, two sum, longest unique substring
  • Sliding window β†’ fixed-size or variable sum
  • Two pointers β†’ palindrome, merge arrays
  • Binary search β†’ search in sorted arrays

Top comments (0)