給定乙個已經公升序排序的整形陣列,找出給定目標值的開始位置和結束位置。
你的演算法時間複雜度必須是 o(log n) 級別。
如果在陣列中找不到目標,返回[-1, -1]
。
例如:
給出[5, 7, 7, 8, 8, 10]
和目標值 8,
返回[3, 4]
。
自己寫的第一種方法就是普通二分查詢,找到target數字之後,分別向前向後遍歷,直到找到乙個不等於target的數字。
這個最差的情況到了o(n)
看了網上的一種方法,試了試,兩次二分查詢,第一次找出開始索引,第二次查詢找出結束索引 。
但是方法二所用的時間比方法一還要多。。
class solution
public static void serch(int index, int nums, int target, int begin, int end)
if (nums[mid] < target)
serch(index, nums, target, mid + 1, end);
if (nums[mid] > target)
serch(index, nums, target, begin, mid - 1);
}}
class solution
public static void serch2(int index, intnums, int target)
index[0] = nums[low]==target? low:-1;
low = 0; high = nums.length-1;
while(low < high)
index[1] = nums[high]==target?high:-1;
}}
LeetCode(34) 搜尋範圍
medium!題目描述 給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 ...
34 搜尋範圍
給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 示例 2 輸入 ...
leetcode 34 區間查詢
一 題目 分析 首先,要求了時間複雜度o log n 說明暴力禁止 我們可以通過二分查詢法確定左右區間邊界 但是不能同時找出左右邊界,我們可以先確定左邊界,再確定右邊界 class solution public int findleft int nums,int target,int begin,...