小明陪小紅去看鑽石,他們從一堆鑽石中隨機抽取兩顆並比較她們的重量。這些鑽石的重量各不相同。在他們們比較了一段時間後,它們看中了兩顆鑽石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;
}
}
}