leetcode上的一道題目
這個題目要求在o(log n)的複雜度內求出乙個有序可重複陣列中乙個數字出現的起始和終止下標。
有序陣列查詢指定元素,首先想到的就是二分查詢。
最基本的二分查詢是用於無重複數字中指定數字出現的下標。
基本的二分查詢是這樣的
int start = 0, end = len-1;
while(start <= end)
else
if (nums[mid] < target)
else
}
而如果想要獲得可重複數字陣列中的第乙個,可以變為
int idx = -1;
int start = 0, end = len-1;
while(start <= end)
else
if(nums[mid] == target)
}returm idx;
同理,可寫出查詢到在可重複陣列中出現最後一次的方法。
因此該問題的一種解法為
public
class solution ;
intmid = (low+high) >> 1;
while(low <= high)
else
if(nums[mid] == target)
}if(start == -1)
low = start;
high = len-1;
while(low <= high)
else
if(nums[mid] == target)
}res[0] = start;
res[1] = end;
return res;
}}
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...
1128 二分 二分查詢
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...
二分查詢及變種二分查詢
二分查詢也稱折半查詢 binary search 它的查詢效率很好。二分查詢有乙個要求是必須採用順序儲存結構,而且表種的元素是有序的。只有滿足這個條件我們才能使用二分查詢。查詢條件 查詢區域的左邊界,小於等於查詢區域的右邊界 查詢過程 1.迴圈條件 查詢條件 2.計算序列中間下標位置 3.如果待查詢...