81 搜尋旋轉排序陣列

2021-09-27 10:26:37 字數 1060 閱讀 2824

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

例如,陣列 [0,0,1,2,2,5,6] 可能變為 [2,5,6,0,0,1,2] 。

編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。

示例

輸入: nums = [2,5,6,0,0,1,2], target = 0

輸出: true

輸入: nums = [2,5,6,0,0,1,2], target = 3

輸出: false

解法

33.搜尋旋轉排序陣列 中我們使用的是二分查詢,同樣的,本題解法也為二分查詢,因為陣列中可能包含重複元素,所以我們要額外判斷下中位數與邊界的關係。

nums[left] < nums[mid]說明陣列前有序,如 4 5 6 7 8 1 2 3

nums[left] > nums[mid]說明陣列後有序,如 6 7 8 1 2 3 4 5

nums[left] == nums[mid]說明有重複元素或中位數為左邊界,如 6 6 7 8 或 6 7

對於情況1 2,我們使用二分查詢;對於情況3,我們判斷nums[mid]是否為目標值,若是,則返回true;若不是,則向右移動左邊界。

public

bool

search

(int

nums,

int target)

else left = mid +1;

}else

if(nums[left]

> nums[mid]

)//後有序 6 7 8 1 2 3 4 5

else right = mid -1;

}else

//重複或中位數為首位 6 6 7 8 或 6 7

}return nums[left]

== target;

}

81 搜尋旋轉排序陣列 II

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0 輸...

81 搜尋旋轉排序陣列 II

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0 輸...

81 搜尋旋轉排序陣列 II

題目.middle 這是乙個二分查詢的公升級版,我們可以認為,經過旋轉後分成了兩部分,left half和right half,所以每次根據mid所在的位置,淘汰掉一半的資料。千萬不要去尋找旋轉點。這樣會搞得很麻煩 package main import fmt func search nums i...