Challenge - 5 Problems
Inversion Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
ā Predict Output
intermediateCount Inversions Output for Small Array
What is the output of the following Go code that counts inversions in an array?
DSA Go
package main import "fmt" func merge(arr []int, temp []int, left int, mid int, right int) int { i := left j := mid k := left invCount := 0 for i < mid && j <= right { if arr[i] <= arr[j] { temp[k] = arr[i] i++ k++ } else { temp[k] = arr[j] invCount += mid - i j++ k++ } } for i < mid { temp[k] = arr[i] i++ k++ } for j <= right { temp[k] = arr[j] j++ k++ } for x := left; x <= right; x++ { arr[x] = temp[x] } return invCount } func mergeSort(arr []int, temp []int, left int, right int) int { invCount := 0 if right > left { mid := (left + right) / 2 invCount += mergeSort(arr, temp, left, mid) invCount += mergeSort(arr, temp, mid+1, right) invCount += merge(arr, temp, left, mid+1, right) } return invCount } func countInversions(arr []int) int { temp := make([]int, len(arr)) return mergeSort(arr, temp, 0, len(arr)-1) } func main() { arr := []int{2, 4, 1, 3, 5} fmt.Println(countInversions(arr)) }
Attempts:
2 left
š” Hint
Count pairs where a larger number appears before a smaller number.
ā Incorrect
The inversions are (2,1), (4,1), and (4,3), totaling 3.
š§ Conceptual
intermediateUnderstanding Inversion Count Concept
Which of the following best describes what an inversion in an array means?
Attempts:
2 left
š” Hint
Think about pairs that are out of order.
ā Incorrect
An inversion is when a bigger number comes before a smaller number in the array.
ā Predict Output
advancedCount Inversions Output for Descending Array
What is the output of this Go code counting inversions for a descending array?
DSA Go
package main import "fmt" func merge(arr []int, temp []int, left int, mid int, right int) int { i := left j := mid k := left invCount := 0 for i < mid && j <= right { if arr[i] <= arr[j] { temp[k] = arr[i] i++ k++ } else { temp[k] = arr[j] invCount += mid - i j++ k++ } } for i < mid { temp[k] = arr[i] i++ k++ } for j <= right { temp[k] = arr[j] j++ k++ } for x := left; x <= right; x++ { arr[x] = temp[x] } return invCount } func mergeSort(arr []int, temp []int, left int, right int) int { invCount := 0 if right > left { mid := (left + right) / 2 invCount += mergeSort(arr, temp, left, mid) invCount += mergeSort(arr, temp, mid+1, right) invCount += merge(arr, temp, left, mid+1, right) } return invCount } func countInversions(arr []int) int { temp := make([]int, len(arr)) return mergeSort(arr, temp, 0, len(arr)-1) } func main() { arr := []int{5, 4, 3, 2, 1} fmt.Println(countInversions(arr)) }
Attempts:
2 left
š” Hint
Count all pairs where a bigger number is before a smaller number in a fully descending array.
ā Incorrect
For 5 elements in descending order, total inversions = 5*4/2 = 10.
š§ Debug
advancedIdentify the Bug in Inversion Count Code
What error will this Go code produce when counting inversions?
DSA Go
package main import "fmt" func merge(arr []int, temp []int, left int, mid int, right int) int { i := left j := mid k := left invCount := 0 for i < mid && j <= right { if arr[i] < arr[j] { // bug here: should be <= temp[k] = arr[i] i++ k++ } else { temp[k] = arr[j] invCount += mid - i j++ k++ } } for i < mid { temp[k] = arr[i] i++ k++ } for j <= right { temp[k] = arr[j] j++ k++ } for x := left; x <= right; x++ { arr[x] = temp[x] } return invCount } func mergeSort(arr []int, temp []int, left int, right int) int { invCount := 0 if right > left { mid := (left + right) / 2 invCount += mergeSort(arr, temp, left, mid) invCount += mergeSort(arr, temp, mid+1, right) invCount += merge(arr, temp, left, mid+1, right) } return invCount } func countInversions(arr []int) int { temp := make([]int, len(arr)) return mergeSort(arr, temp, 0, len(arr)-1) } func main() { arr := []int{2, 4, 1, 3, 5} fmt.Println(countInversions(arr)) }
Attempts:
2 left
š” Hint
Check the comparison operator in the merge function.
ā Incorrect
Using '<' instead of '<=' skips counting some equal elements correctly, causing undercount.
š Application
expertMaximum Inversions in Array of Size N
For an array of size N, what is the maximum number of inversions possible?
Attempts:
2 left
š” Hint
Think about the array sorted in descending order.
ā Incorrect
Maximum inversions occur when every pair is inverted, which is N*(N-1)/2.
