LeetCode—33. 搜索旋转排序数组
生活随笔
收集整理的這篇文章主要介紹了
LeetCode—33. 搜索旋转排序数组
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
33. 搜索旋轉(zhuǎn)排序數(shù)組
題目描述:整數(shù)數(shù)組 nums 按升序排列,數(shù)組中的值 互不相同 。
在傳遞給函數(shù)之前,nums 在預(yù)先未知的某個(gè)下標(biāo) k(0 <= k < nums.length)上進(jìn)行了 旋轉(zhuǎn),使數(shù)組變?yōu)?[nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下標(biāo) 從 0 開(kāi)始 計(jì)數(shù))。例如, [0,1,2,4,5,6,7] 在下標(biāo) 3 處經(jīng)旋轉(zhuǎn)后可能變?yōu)?[4,5,6,7,0,1,2] 。
給你旋轉(zhuǎn)后的數(shù)組 nums 和一個(gè)整數(shù) target ,如果 nums 中存在這個(gè)目標(biāo)值 target ,則返回它的下標(biāo),否則返回 -1 。
考察重點(diǎn):二分查找
方法概括:先遍歷找到旋轉(zhuǎn)位置,前數(shù)組為原數(shù)組后半部分,后數(shù)組為原數(shù)組前半部分,根據(jù)target大小選擇在哪個(gè)數(shù)組進(jìn)行二分查找。
public int search(int[] nums, int target) {int left = 0, right = nums.length - 1;for (; left + 1 <= right && nums[left] < nums[left + 1]; left++) {} //遍歷找到旋轉(zhuǎn)的起始位置//對(duì)于[4,5,6,7,0,1,2] left目前指向7,right目前指向2if (left == right) { // left right更新為記錄待查找數(shù)組的左右邊界left = 0;} else if (nums[right] >= target) {left++;} else { right = left;left = 0;}while (left <= right) {int mid = left + (right - right) / 2;if (nums[mid] == target) {return mid;}if (target < nums[mid]) {right = mid - 1;}if (target > nums[mid]) {left = mid + 1;}}return -1; }總結(jié)
以上是生活随笔為你收集整理的LeetCode—33. 搜索旋转排序数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode—207. 课程表
- 下一篇: 基于混合云存储系统的电影推荐引擎小结