package com.interview.array; /** * Date 12/29/15 * @author Tushar Roy * * Given input array find number of inversions where i < j < k and input[i] > input[j] > input[k] * * http://www.geeksforgeeks.org/count-inversions-of-size-three-in-a-give-array/ */ public class CountInversionOfSize3 { /** * Time complexity of this method is O(n^2) * Space complexity is O(1) */ public int findInversions(int input[]) { int inversion = 0; for (int i = 1; i < input.length - 1 ; i++) { int larger = 0; for (int k = 0; k < i; k++) { if (input[k] > input[i]) { larger++; } } int smaller = 0; for (int k = i+1; k < input.length; k++) { if (input[k] < input[i]) { smaller++; } } inversion += smaller*larger; } return inversion; } public static void main(String args[]) { int input[] = {9, 6, 4, 5, 8}; CountInversionOfSize3 ci = new CountInversionOfSize3(); System.out.print(ci.findInversions(input)); } }