三分找極值點:
解題思路:
1.先用三分查詢,找到極值點的位置pt
2.根據pt將陣列分成兩段,先對第一段[0,pt]二分查詢target,找到立即返回
3.如果第一段沒有找到target,則二分查詢第二段[pt,arr.length-1]
這樣滿足查詢不超過100次的要求嗎?
答:三分 複雜度據說是2log3(n) ,二分複雜度是2log2(n)。
那麼找極值點 最多需要查詢 2log3(n) = 2log3(10000) ≈ 2*9 = 18 次
二分最多需要呼叫 2*log2(10000) ≈ 2*14 = 28 次
18 + 28 < 100,所以這個方案是滿足要求的。
class solution else}int ll = mountainarr.get(l);
int rr = mountainarr.get(r);
int pt = ll>rr?l:r;
//pt是極值點
//二分左邊,找到返回
int rs = two_divide(0,pt,true);
if(rs!=-1) return rs;
//二分右邊
rs = two_divide(pt+1,len-1,false);
return rs;
}private int two_divide(int l, int r,boolean up) else
}return -1;
}elseelse if(target}return -1;}}
}
leetcode 山脈問題
給定乙個整數陣列 a,如果它是有效的山脈陣列就返回 true,否則返回 false。讓我們回顧一下,如果 a 滿足下述條件,那麼它是乙個山脈陣列 a.length 3 在 0 i a.length 1 條件下,存在 i 使得 a 0 a 1 a i 1 a i a i a i 1 a a.lengt...
1095 山脈陣列中查詢目標值
這是乙個 互動式問題 給你乙個 山脈陣列 mountainarr,請你返回能夠使得 mountainarr.get index 等於 target 最小 的下標 index 值。如果不存在這樣的下標 index,就請返回 1。所謂山脈陣列,即陣列 a 假如是乙個山脈陣列的話,需要滿足如下條件 首先,...
1095 山脈陣列中查詢目標值
這是乙個 互動式問題 給你乙個 山脈陣列 mountainarr,請你返回能夠使得 mountainarr.get index 等於 target 最小 的下標 index 值。如果不存在這樣的下標 index,就請返回 1。何為山脈陣列?如果陣列 a 是乙個山脈陣列的話,那它滿足如下條件 首先,a...