package interview;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
*
* @author
* 计算数组中有几对相反数
*
*/
public class ListSort {
public static void main(String[] args) {
ListSort test = new ListSort();
List list = Arrays.asList(9,1,3,8,-10,7,-9,-2,-8,2);
Context contextMin= new Context<>(test.new MinComparatorList());
// Context contextMax= new Context<>(test.new MaxComparatorList());
List listMin = contextMin.sortList(list);
// List listMax = contextMax.sortList(list);
Integer[] arrays = (Integer[]) listMin.toArray();
System.out.println(getCount(arrays,getMidIndex(arrays)));
}
public static int getCount(Integer[] arrays,int mid) {
int count=0;
for(int i=0;i
for(int j=mid;j
if(arrays[i]+arrays[j]==0) {
count++;
}
}
}
return count;
}
public static int getMidIndex(Integer[] arrays) {
int start = 0;
int end =arrays.length-1;
int mid = 0;
while(start<=end) {
mid = (end-start)/2+start;
if((mid>0 && arrays[mid]>0&& arrays[mid-1]<0)) {
return mid;
}else if(mid>0 &&arrays[mid]>0 && arrays[mid-1]>0) {
end = mid-1;
}else if(arrays[mid]<0 && arrays[mid+1]<0){
start=mid+1;
}
}
return mid;
}
/*
* 策略模式
*/
class MinComparatorList implements Comparator{
@Override
public int compare(Integer o1, Integer o2) {
return o1>o2?1:-1;
}
}
class MaxComparatorList implements Comparator{
@Override
public int compare(Integer o1, Integer o2) {
return o1
}
}
public static class Context{
private Comparator comparator;
public Context(Comparator comparator) {
this.comparator = comparator;
}
public List sortList(List list) {
Collections.sort(list,comparator);
return list;
}
}
}