Leetcode精選之ID33 搜尋排序陣列

2021-08-30 08:20:34 字數 1226 閱讀 4098

leetcode 33:搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

你可以假設陣列中不存在重複的元素。 你的演算法時間複雜度必須是 o(log n) 級別。

示例 1: 輸入: nums =[4,5,6,7,0,1,2], target = 0 輸出: 4

示例 2: 輸入: nums = [4,5,6,7,0,1,2],target = 3 輸出: -1

思路: 看到排序陣列中查詢,我們第一時間想到的就是二分查詢,也只有二分查詢能達到log n的時間複雜度了,但是這個乙個旋轉過的排序陣列,我們該如何尋找它與排序陣列之間的共同點呢?

我們可以觀察到對於 nums = [4,5,6,7,0,1,2],我們直接進行二分查詢的思路,找到的中點是 7,可以發現,7左邊都是已排序的陣列(包括7),7右邊是部分有序的陣列(也是乙個旋轉排序陣列)(不包括7),因此,我們可不可以得出這樣乙個結論,如果中點的數比最右邊的數要小,則7 左邊的陣列有序,右邊的還是乙個旋轉排序陣列,否則 7 左邊的是乙個旋轉排序陣列,右邊是乙個排序陣列。

public

intsearch

(int

nums,

int target)

int start =0;

int end = nums.length -1;

return

mysearch

(nums, target, start, end);}

private

intmysearch

(int

nums,

int target,

int start,

int end)

// 處理邊界

if(end < start)

if(end == start)

int mid =

(end + start)/2

;if(nums[mid]

> nums[end])}

else

return result;

}else

}else

return result;

}}

leetcode騰訊精選練習50(9) 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 可以先將陣列排序,當...

LeetCode題目之騰訊精選練習(50題) 子集

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1 2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 public ilist int subsets int nums for int k len k list...

leetcode練習之陣列33 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...