Cognizant GenC Elevate Coding Questions – Set 2

Cognizant GenC Elevate Coding Questions – Set 2 (Intermediate)

Previously asked Cognizant GenC Elevate Coding Questions – Set 2 (Intermediate)

These coding questions are crafted for Cognizant GenC Elevate preparation, reflecting the intermediate difficulty level observed in recent exams (2022-2024). Solutions are provided in C++ and Python with detailed explanations.

Question 1: Fibonacci Number (Recursive with Memoization)

Given a number n, find the nth Fibonacci number (0-based index) efficiently.

Input: n = 6
Output: 8 (Sequence: 0, 1, 1, 2, 3, 5, 8)

Solution in C++

#include 
using namespace std;

int fib(int n, vector& memo) {
    if (n <= 0) return 0;
    if (n == 1) return 1;
    if (memo[n] != -1) return memo[n];
    memo[n] = fib(n-1, memo) + fib(n-2, memo);
    return memo[n];
}

int fibonacci(int n) {
    vector memo(n + 1, -1);
    return fib(n, memo);
}

int main() {
    int n = 6;
    cout << fibonacci(n) << endl;
    return 0;
}
            

Solution in Python

def fibonacci(n, memo=None):
    if memo is None:
        memo = {}
    if n <= 0:
        return 0
    if n == 1:
        return 1
    if n in memo:
        return memo[n]
    memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
    return memo[n]

n = 6
print(fibonacci(n))
            

Explanation

Approach: Use recursion with memoization to avoid redundant calculations. Store computed Fibonacci values in a memo array/dictionary. Time Complexity: O(n), Space Complexity: O(n).

Relevance: Recursion with optimization is a GenC Elevate topic.

Question 2: Longest Common Prefix

Given an array of strings, find the longest common prefix among them.

Input: arr = ["flower", "flow", "flight"]
Output: "fl"

Solution in C++

#include 
using namespace std;

string longestCommonPrefix(vector& arr) {
    if (arr.empty()) return "";
    string prefix = arr[0];
    for (int i = 1; i < arr.size(); i++) {
        while (arr[i].find(prefix) != 0) {
            prefix = prefix.substr(0, prefix.size() - 1);
            if (prefix.empty()) return "";
        }
    }
    return prefix;
}

int main() {
    vector arr = {"flower", "flow", "flight"};
    cout << longestCommonPrefix(arr) << endl;
    return 0;
}
            

Solution in Python

def longest_common_prefix(arr):
    if not arr:
        return ""
    prefix = arr[0]
    for s in arr[1:]:
        while s.find(prefix) != 0:
            prefix = prefix[:-1]
            if not prefix:
                return ""
    return prefix

arr = ["flower", "flow", "flight"]
print(longest_common_prefix(arr))
            

Explanation

Approach: Start with the first string as the prefix. For each subsequent string, shorten the prefix until it matches the start. Time Complexity: O(S) where S is the sum of all characters, Space Complexity: O(1).

Relevance: String prefix problems test pattern matching in GenC Elevate.

Question 3: Move Zeros to End

Given an array of integers, move all zeros to the end while maintaining the relative order of non-zero elements.

Input: arr = [0, 1, 0, 3, 12]
Output: [1, 3, 12, 0, 0]

Solution in C++

#include 
using namespace std;

void moveZeros(vector& arr) {
    int nonZeroPos = 0;
    for (int i = 0; i < arr.size(); i++) {
        if (arr[i] != 0) {
            arr[nonZeroPos++] = arr[i];
        }
    }
    while (nonZeroPos < arr.size()) {
        arr[nonZeroPos++] = 0;
    }
}

int main() {
    vector arr = {0, 1, 0, 3, 12};
    moveZeros(arr);
    for (int x : arr) cout << x << " ";
    cout << endl;
    return 0;
}
            

Solution in Python

def move_zeros(arr):
    non_zero_pos = 0
    for i in range(len(arr)):
        if arr[i] != 0:
            arr[non_zero_pos], arr[i] = arr[i], arr[non_zero_pos]
            non_zero_pos += 1

arr = [0, 1, 0, 3, 12]
move_zeros(arr)
print(arr)
            

Explanation

Approach: Move all non-zero elements to the front using a pointer, then fill the rest with zeros. Time Complexity: O(n), Space Complexity: O(1).

Relevance: In-place array manipulation is a GenC Elevate classic.

Question 4: Check if Array is Sorted and Rotated

Given an array, check if it is sorted (ascending) and rotated.

Input: arr = [3, 4, 5, 1, 2]
Output: true (Sorted: [1, 2, 3, 4, 5], rotated once)

Solution in C++

#include 
using namespace std;

bool isSortedRotated(vector& arr) {
    int n = arr.size(), drops = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] > arr[(i + 1) % n]) {
            drops++;
        }
        if (drops > 1) return false;
    }
    return drops == 1;
}

int main() {
    vector arr = {3, 4, 5, 1, 2};
    cout << (isSortedRotated(arr) ? "true" : "false") << endl;
    return 0;
}
            

Solution in Python

def is_sorted_rotated(arr):
    n = len(arr)
    drops = 0
    for i in range(n):
        if arr[i] > arr[(i + 1) % n]:
            drops += 1
        if drops > 1:
            return False
    return drops == 1

arr = [3, 4, 5, 1, 2]
print(is_sorted_rotated(arr))
            

Explanation

Approach: Count the number of "drops" where an element is greater than the next (considering wrap-around). A sorted and rotated array has exactly one drop. Time Complexity: O(n), Space Complexity: O(1).

Relevance: Array properties and cyclic checks are GenC Elevate-level challenges.

Ready to conquer GenC Elevate? Access more intermediate problems and prep strategies to shine in your exam!

Master Your Prep with Jobs Addaa Resources

Discover more from Jobs Addaa

Subscribe to get the latest posts sent to your email.

Discover more from Jobs Addaa

Subscribe now to keep reading and get access to the full archive.

Continue reading