-
3,1,2 1,2,3,4,5
样例输出
-
1 0
我的java代码。。。求大神不吝赐教。
-
package com.summer.intern;
import java.util.Scanner;
public class Main {
public static int getInversionCount(int data[])
{
int count=0;
for(int i=0;i<data.length;i++){
for(int j=i+1;j<data.length;j++)
{
if(data[i]>data[j]) count++;
}
}
return count;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNextLine()) {
String line = input.nextLine();
String num[] = line.split(",");
int data[]=null;
data=new int [num.length];
for(int i=0;i<num.length;i++)
{
data[i]=Integer.parseInt(num[i]);
}
int orial_inversion_count=getInversionCount(data);
int temp_data[]=data.clone();
for(int i=0;i<data.length;i++){
for(int j=i+1;j<data.length;j++){
int temp=temp_data[i];
temp_data[i]=temp_data[j];
temp_data[j]=temp;
int now_inversion_count=getInversionCount(temp_data);
if(orial_inversion_count>now_inversion_count)
{
orial_inversion_count=now_inversion_count;
}
temp_data=data.clone();
}
}
System.out.println(orial_inversion_count);
}
}
}
Description
Find a pair in an integer array that swapping them would maximally decrease the inversion count of the array. If such a pair exists, return the new inversion count; otherwise returns the original inversion count.
Definition of Inversion: Let (A[0], A[1] ... A[n], n <= 50) be a sequence of n numbers. If i < j and A[i] > A[j], then the pair (i, j) is called inversion of A.
Example:
Count(Inversion({3, 1, 2})) = Count({3, 1}, {3, 2}) = 2
InversionCountOfSwap({3, 1, 2})=>
{
InversionCount({1, 3, 2}) = 1 <-- swapping 1 with 3, decreases inversion count by 1
InversionCount({2, 1, 3}) = 1 <-- swapping 2 with 3, decreases inversion count by 1
InversionCount({3, 2, 1}) = 3 <-- swapping 1 with 2 , increases inversion count by 1
}
Input
Input consists of multiple cases, one case per line.Each case consists of a sequence of integers separated by comma.
Output
For each case, print exactly one line with the new inversion count or the original inversion count if it cannot be reduced.