计算数组中有几对相反数

Posted qazliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算数组中有几对相反数相关的知识,希望对你有一定的参考价值。

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<Integer> list = Arrays.asList(9,1,3,8,-10,7,-9,-2,-8,2);
        Context<Integer> contextMin= new Context<>(test.new MinComparatorList());
//        Context<Integer> contextMax= new Context<>(test.new MaxComparatorList());
        
        List<Integer> listMin = contextMin.sortList(list);
//        List<Integer> 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<mid;i++) {
			for(int j=mid;j<arrays.length;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<Integer>{

		@Override
		public int compare(Integer o1, Integer o2) {
			return o1>o2?1:-1;
		}
	}
	 class MaxComparatorList implements Comparator<Integer>{

		@Override
		public int compare(Integer o1, Integer o2) {
			return o1<o2?1:-1;
		}
		
	}
	public static class Context<T>{
		private Comparator<T> comparator;
		public Context(Comparator<T> comparator) {
			this.comparator = comparator;
		}

		public List<T> sortList(List<T> list) {
			Collections.sort(list,comparator);
			return list;
		}
		
		
	}
	
}

 

以上是关于计算数组中有几对相反数的主要内容,如果未能解决你的问题,请参考以下文章

求数组中,一共有几对 每两个值相加等于8的

Codeforces Round #621 (Div. 1 + Div. 2)E(二分查找,枚举分界点,容斥原理)

判断数组的方法

如何从活动中更改片段中视图的可见性

如何从片段内的列表视图打开链接网址?

java.lang.IllegalStateException:键 f0 的片段不再存在:索引 1