比較重量(網易筆試題)

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


發佈了48 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章