LeetCode34搜尋範圍

2021-08-17 03:31:00 字數 965 閱讀 8682

給定乙個已經公升序排序的整形陣列,找出給定目標值的開始位置和結束位置。

你的演算法時間複雜度必須是 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,...