【二分查找】面试题 08.03. 魔术索引

面试题 08.03. 魔术索引

解题思路

在这里插入图片描述

  • 改写递归二分查找的思路
  • 首先查找mid的值是不是mid 如果是 由于有多个解,那么递归搜索左半边的空间
  • 然后如果没找到,首先搜索左半边的空间,然后搜索右半边的空间
class Solution {
    
    

    public int res = -1;

    private void search(int[] nums,int low,int high){
    
    
        if(low > high){
    
    
            return;
        }

        int mid  = low + (high  - low) / 2;

        // 如果找到 直接搜索左半边的空间
        if(nums[mid] == mid){
    
    
            res = mid;// 保存一下结果
            search(nums,low,mid - 1);// 搜索左半边的空间
        }
        else{
    
    
            // 如果没有找到  先搜索左半边 然后搜索右半边
            search(nums,low,mid - 1);
            if(res == -1 || res > high){
    
    
                // 搜索右半边
                search(nums,mid + 1,high);
            }
        }

    }

    // 递归二分查找
    public int findMagicIndex(int[] nums) {
    
    
       search(nums,0,nums.length - 1);
       return res;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44653420/article/details/131647600
今日推荐