Java教程

【每日一题】【二分查找】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;
    }
}

 

这篇关于【每日一题】【二分查找】2021年11月2日-搜索旋转排序数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!