Bird
Raised Fist0
DSA Typescriptprogramming~20 mins

Count Inversions in Array in DSA Typescript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
šŸŽ–ļø
Inversion Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
ā“ Predict Output
intermediate
2:00remaining
Count inversions in a small array
What is the output of the following TypeScript code that counts inversions in the array?
DSA Typescript
function countInversions(arr: number[]): number {
  let count = 0;
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) count++;
    }
  }
  return count;
}

console.log(countInversions([2, 4, 1, 3, 5]));
A2
B4
C5
D3
Attempts:
2 left
šŸ’” Hint
Count pairs (i, j) where i < j and arr[i] > arr[j].
ā“ Predict Output
intermediate
2:00remaining
Count inversions using merge sort approach
What is the output of this TypeScript code that counts inversions using a merge sort method?
DSA Typescript
function mergeSortCount(arr: number[]): [number[], number] {
  if (arr.length <= 1) return [arr, 0];
  const mid = Math.floor(arr.length / 2);
  const [left, leftCount] = mergeSortCount(arr.slice(0, mid));
  const [right, rightCount] = mergeSortCount(arr.slice(mid));
  let i = 0, j = 0, count = leftCount + rightCount;
  const merged: number[] = [];
  while (i < left.length && j < right.length) {
    if (left[i] <= right[j]) {
      merged.push(left[i++]);
    } else {
      merged.push(right[j++]);
      count += left.length - i;
    }
  }
  return [merged.concat(left.slice(i)).concat(right.slice(j)), count];
}

const [sorted, inversions] = mergeSortCount([8, 4, 2, 1]);
console.log(inversions);
A6
B5
C4
D7
Attempts:
2 left
šŸ’” Hint
Count how many elements from left are greater than elements from right during merge.
šŸ”§ Debug
advanced
2:00remaining
Identify the error in inversion count code
What error does this TypeScript code produce when counting inversions?
DSA Typescript
function countInversions(arr: number[]): number {
  let count = 0;
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) count++;
    }
  }
  return count;
}

console.log(countInversions([1, 3, 2]));
ASyntaxError: Unexpected token
BTypeError: Cannot read property 'undefined' of undefined
COutput: 1
DOutput: 0
Attempts:
2 left
šŸ’” Hint
Check the loop boundary conditions carefully.
🧠 Conceptual
advanced
1:00remaining
Time complexity of counting inversions using merge sort
What is the time complexity of counting inversions in an array of size n using the merge sort approach?
AO(n^2)
BO(log n)
CO(n log n)
DO(n)
Attempts:
2 left
šŸ’” Hint
Think about how merge sort divides and merges the array.
šŸš€ Application
expert
3:00remaining
Number of inversions after swapping two elements
Given the array [3, 1, 2, 5, 4], what is the number of inversions after swapping elements at indices 1 and 4?
A6
B3
C5
D2
Attempts:
2 left
šŸ’” Hint
First count inversions in original array, then count after swap.

Practice

(1/5)
1. What does the term inversion mean in the context of an array?
easy
A. The sum of all elements in the array
B. A pair of elements where the first is smaller than the second and appears before it
C. The total number of elements in the array
D. A pair of elements where the first is greater than the second and appears before it

Solution

  1. Step 1: Understand the definition of inversion

    An inversion is a pair of elements (i, j) such that i < j but array[i] > array[j].
  2. Step 2: Compare options with definition

    A pair of elements where the first is greater than the second and appears before it correctly describes this condition. Other options describe unrelated concepts.
  3. Final Answer:

    A pair of elements where the first is greater than the second and appears before it -> Option D
  4. Quick Check:

    Inversion = pair where earlier element > later element [OK]
Hint: Inversion means earlier bigger than later element [OK]
Common Mistakes:
  • Confusing inversion with sorted order
  • Thinking inversion counts total elements
  • Mixing up greater and smaller element order
2. Which of the following TypeScript function signatures correctly represents a function to count inversions in an array of numbers?
easy
A. function countInversions(arr: string): number[]
B. function countInversions(arr: number): string
C. function countInversions(arr: number[]): number
D. function countInversions(arr: any): void

Solution

  1. Step 1: Analyze the function purpose and parameters

    The function should take an array of numbers and return a number representing the count of inversions.
  2. Step 2: Match the correct signature

    function countInversions(arr: number[]): number matches this: input is number array, output is number. Others mismatch input/output types.
  3. Final Answer:

    function countInversions(arr: number[]): number -> Option C
  4. Quick Check:

    Input array, output number count [OK]
Hint: Input array of numbers, output single number [OK]
Common Mistakes:
  • Using wrong input type like string instead of array
  • Returning array instead of number
  • Using void return type when output is needed
3. What is the output of the following TypeScript code?
function countInversions(arr: number[]): number {
  let count = 0;
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) count++;
    }
  }
  return count;
}

console.log(countInversions([2, 4, 1, 3, 5]));
medium
A. 3
B. 4
C. 2
D. 5

Solution

  1. Step 1: Identify all inversion pairs in the array

    Array: [2, 4, 1, 3, 5]. Inversions are (2,1), (4,1), (4,3). Total 3 inversions.
  2. Step 2: Confirm the count returned by the nested loops

    The nested loops count each inversion correctly, so output is 3.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    Inversions = 3 [OK]
Hint: Count pairs where earlier > later element [OK]
Common Mistakes:
  • Counting pairs incorrectly by missing some
  • Confusing equal elements as inversions
  • Off-by-one errors in loops
4. The following code attempts to count inversions but has a bug. What is the bug?
function countInversions(arr: number[]): number {
  let count = 0;
  for (let i = 0; i <= arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) count++;
    }
  }
  return count;
}
medium
A. The inner loop should start from j = 0 instead of i + 1
B. The outer loop condition should be < instead of <= to avoid out-of-bounds
C. The count variable should be reset inside the outer loop
D. The comparison should be arr[i] < arr[j] instead of >

Solution

  1. Step 1: Analyze the outer loop condition

    The outer loop runs from i = 0 to i <= arr.length, which means i can be arr.length, causing arr[i] to be undefined (out-of-bounds).
  2. Step 2: Correct the loop condition

    Changing to i < arr.length prevents out-of-bounds access and fixes the bug.
  3. Final Answer:

    The outer loop condition should be < instead of <= to avoid out-of-bounds -> Option B
  4. Quick Check:

    Loop bounds must prevent out-of-range access [OK]
Hint: Use < length, not <= length in loops [OK]
Common Mistakes:
  • Using <= causes index out-of-bounds error
  • Resetting count inside loop loses total count
  • Changing comparison reverses inversion logic
5. Given the array [8, 4, 2, 1], which approach is the most efficient to count inversions and what is the inversion count?
hard
A. Use a modified merge sort to count inversions; count is 6
B. Use nested loops to count inversions; count is 3
C. Sort the array and count differences; count is 4
D. Use a hash map to count inversions; count is 5

Solution

  1. Step 1: Identify inversion count manually

    Array: [8,4,2,1]. Inversions are (8,4), (8,2), (8,1), (4,2), (4,1), (2,1) totaling 6.
  2. Step 2: Choose the most efficient method

    Modified merge sort counts inversions in O(n log n), better than nested loops O(n²). Hash map or sorting differences do not directly count inversions.
  3. Final Answer:

    Use a modified merge sort to count inversions; count is 6 -> Option A
  4. Quick Check:

    Merge sort method = 6 inversions [OK]
Hint: Use merge sort for large arrays to count inversions fast [OK]
Common Mistakes:
  • Counting inversions incorrectly by missing pairs
  • Using nested loops for large arrays causing slow performance
  • Confusing sorting with inversion counting
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard