1. 程式人生 > >[Leetcode] Search in Rotated Sorted Array

[Leetcode] Search in Rotated Sorted Array

原題連結在此

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

可以利用二分查詢的思路,達到O(logN)的時間複雜度。

這樣排序的特點就是,存在一個最小值(比如上面例子裡的0),這個最小值的左半部分的最小值(比如上面例子裡的4),大於:這個最小值的右半部分(包括他本身)的最大值(比如上面例子裡的2)。可以利用這一點來找這個最小值。

class Solution {
public:
	int search(vector<int>& nums, int target) {
		int low = 0, high = nums.size() - 1;
		int mid = 0;
		while (low < high) {
			mid = (low + high) / 2;
			if (nums[mid] > nums[high])
				low = mid + 1;
			else
				high = mid;
		}
		int smallest = low;

		if (nums.size() == 0) {
			return -1;
		} else if (target >= nums[smallest] && target <= nums[nums.size() - 1]) {
			low = smallest;
			high = nums.size() - 1;
		} else if (target >= nums[0] && target <= nums[smallest - 1]) {
			low = 0;
			high = smallest - 1;
		} else {
			return -1;
		}

		while (low <= high) {
			mid = (low + high) / 2;
			if (nums[mid] == target) return mid;
			if (nums[mid] < target) low = mid + 1;
			else high = mid - 1;
		}

		return -1;
	}
};


相關推薦

[LeetCode] Search in Rotated Sorted Array ii

become duplicate 代碼 elf end sort medium etc 判斷 題目內容 Suppose an array sorted in ascending order is rotated at some pivot unknown to you b

[LeetCode] Search in Rotated Sorted Array II 在旋轉有序陣列中搜索之二

Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function

[LeetCode] Search in Rotated Sorted Array 在旋轉有序陣列中搜索

Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target val

[leetcode ]Search in Rotated Sorted Array

題目: Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become You are given a target va

[Leetcode] Search in Rotated Sorted Array

原題連結在此 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might beco

LeetCode-面試算法經典-Java實現】【033-Search in Rotated Sorted Array(在旋轉數組中搜索)】

class con 旋轉 rip target ext addclass 返回 rotated 【033-Search in Rotated Sorted Array(在旋轉數組中搜索)】 【LeetCode-面試算法經典-Java實現】【全部題目

leetcode筆記:Search in Rotated Sorted Array

else div ren pub search 數值 src iostream dsm 一.題目描寫敘述 二.解題技巧 因為這道題出現了旋轉的情況,即比第一個元素小的元素可能出如今數值的後半段或者不出現。因此。能夠考慮採用變種的二分查找,即在比較

LeetCode 33. Search in Rotated Sorted Array(在旋轉有序序列中搜索)

one cheng http ati .com order hal 幫助 列表 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (

LeetCode:33. Search in Rotated Sorted Array(Medium)

可能 要求 時間 idt stat ems oid pri 折半查找法 1. 原題鏈接 https://leetcode.com/problems/search-in-rotated-sorted-array/description/ 2. 題目要求 給定一個按升序排列的數

LeetCode-33. Search in Rotated Sorted Array

二分法 ear 二分查找 bsp 兩種 問題解決 img ret color 一、問題描述      一個有序數組,將它截成兩部分,然後兩部分換位置,得到數組nums。比如對於01234567這個數組,分成012和4567這兩個部分,然後把這兩個部分調換位置,012放在後,

LeetCode-81. Search in Rotated Sorted Array II

解決 sea ++ ddl 調整 .html 重復 lee clas 一、問題描述   這是問題33的升級版,在數組中有重復元素。 二、問題解決   思路和問題33一樣,不同點在於判斷nums[left]==nums[middle]的時候不能得出左右哪個是單調遞增,哪個是循

Leetcode】33. Search in Rotated Sorted Array

null duplicate rotated 是否 == pre ray else while Question: Suppose an array sorted in ascending order is rotated at some pivot unknown t

Search in Rotated Sorted Array II LeetCode Java

ret RM In arr duplicate true rst array AS 描述Follow up for ”Search in Rotated Sorted Array”: What if duplicates are allowed?Would this aff

LeetCode 33. Search in Rotated Sorted Array

inf .cn arr ima etc earch 要求 表示 部分 這道題目很經典,本人表示在面試時遇見過,要求復雜度為O(logn),很顯然必須用二分查找,但是旋轉導致數組並非從左到右都是有序的,因此我們在查找時需要做判斷,我們找打的終點左邊或者右邊至少一邊

LeetCode Day27 Search in Rotated Sorted Array

原二分查詢要求陣列已排序,這樣目標只需與中間元素比較就可判斷下一步需要去左半部分查詢還是右半部分查詢。現陣列經過了旋轉排序,若仍僅僅與中間元素比較無法判斷元素具體在哪個半區(左右兩邊元素都可能比中間元素大或小),所以要進行多次判斷。但是旋轉之後的順序也存在規律,可以發現,若中間元素比最右邊元

LeetCode-33 search-in-rotated-sorted-array 搜尋旋轉排序陣列

題目連結 https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ 題意         對於一個升序排序的陣列,從某個位置截斷,然後直接拼在後面。看題目給的例子,還是比較

[leetcode]33. Search in Rotated Sorted Array旋轉過有序陣列的查詢問題

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7

#Leetcode# 33. Search in Rotated Sorted Array

https://leetcode.com/problems/search-in-rotated-sorted-array/   Suppose an array sorted in ascending order is rotated at some pivot unknown to you b

[Leetcode]33. Search in Rotated Sorted Array

思路很簡單,分類討論: 如果要查詢的數小於陣列第一個數,那就在旋轉後的後半陣列 如果要查詢的數大於陣列第一個數,那就在前半陣列找 坑點:  1.注意空輸入  2.注意看是否有可能有重複的數存在,這個題是沒有重複的數的 //劍指offer上面有 cons

LeetCode】33. Search in Rotated Sorted Array(C++)

地址:https://leetcode.com/problems/search-in-rotated-sorted-array/ 題目: Suppose an array sorted in ascending order is rotated at some pivot unkno