1. 程式人生 > 其它 >【每日一題】【二分查詢】2021年11月2日-搜尋旋轉排序陣列

【每日一題】【二分查詢】2021年11月2日-搜尋旋轉排序陣列

【某下標處進行了旋轉】整數陣列 nums 按升序排列,陣列中的值 互不相同 。

在傳遞給函式之前,nums 在預先未知的某個下標 k(0 <= k < nums.length)上進行了 旋轉,使陣列變為 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下標 從 0 開始 計數)。例如, [0,1,2,4,5,6,7] 在下標 3 處經旋轉後可能變為[4,5,6,7,0,1,2] 。

給你 旋轉後 的陣列 nums 和一個整數 target ,如果 nums 中存在這個目標值 target ,則返回它的下標,否則返回-1

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/search-in-rotated-sorted-array
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路:移動左右指標,判斷mid和邊界的大小

核心:mid和邊界比較,分別進行

class Solution {
    public int search(int[] nums, int target) {
        int low = 0, high = nums.length  - 1;
        int mid;
        while(low <= high) {
            mid 
= (high + low) >> 1; //位運算>>1,右移一位相當於除以2 //mid = low + (high - low) >> 1;不可以 if(nums[mid] == target) { return mid; } else if(nums[mid] < nums[high]) { //注意:除了mid,其他的有可能位置上=target if(nums[mid] < target && nums[high] >= target) { low
= mid + 1; } else { high = mid - 1; } } else { if(nums[mid] > target && nums[low] <= target) { high = mid - 1; } else { low = mid + 1; } } } return -1; } }