比较重量(网易笔试题)

小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们们比较了一段时间后,它们看中了两颗钻石g1和g2。现在请你根据之前比较的信息判断这两颗钻石的哪颗更重。


给定两颗钻石的编号 g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号。最后给定之前的比较次数n。请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0。输入数据保证合法,不会有矛盾情况出现。


测试样例:

2,3,[[1,2],[2,4],[1,3],[4,3]],4


返回: 

1



java版本的代码实现:

package cn.cat.test;

public class Test {
	/**比较重量(网易笔试题)
	 * @Description: 
	 * @author gwj
	 * @Created 2017年9月15日 下午4:39:58 
	 * @param args
	 */
	public static void main(String[] args) {
		int g1 = 2, g2 = 3;
		//使用Pair类来代替二维数组的表示。例如new Pair(1,2)表示数组[1,2]
		Pair[] data = new Pair[]{new Pair(1,2), new Pair(2,4), new Pair(1,3), new Pair(4,3)};
		int result = compare(g1, g2, data);
		System.out.println(result);
	}
	
	static int compare(int g1, int g2, Pair[] data) {
		//按正常比较
		int result = compareBigger(g1, g2, data);
		//如果无法判断结果,则尝试交换两个钻石的比较位置
		if (result == 0) {
			result = compareBigger(g2, g1, data);
			//因为交换了比较位置,注意返回结果是互逆的
			result = -result;
		}
		return result;
	}
	
	static int compareBigger(int g1, int g2, Pair[] data) {
		for (Pair pair : data) {
			if (pair.left == g1) {
				if (pair.right == g2) {
					//右边元素更好是需要比较的元素,则只需可以得出比较结果,注意返回的数值为1。
					return 1;
				} else {
					//右边元素还不是需要比较的元素,则进行递归查找。
					return compareBigger(pair.right, g2, data);
				}
			}
		}
		
		return 0;
	}
	
	
	
	//键值对封装对象
	private static class Pair{
		int left;
		int right;
		public Pair(int left, int right) {
			this.left = left;
			this.right = right;
		}
		
	}
	
}


posted @ 2017-09-18 10:32  奕辰杰  阅读(219)  评论(0编辑  收藏  举报