leetcode 面试题 08.03.魔术索引

原题如下:

https://leetcode-cn.com/problems/magic-index-lcci/
leetcode 面试题 08.03.魔术索引_第1张图片

题解

方法一:

暴力遍历,从第一位开始寻找,直到找到坐标和值相同的为止。
本方法java代码:

/*常规遍历
 *作者@v7fgg
 *执行用时 :1 ms, 在所有 Java 提交中击败了57.67%的用户
 *内存消耗 :40.5 MB, 在所有 Java 提交中击败了100.00%的用户
 *2020年5月11日 7:39
 */
class Solution {
     
    public int findMagicIndex(int[] nums) {
     
        for(int i=0;i<nums.length;i++){
     
            if(nums[i]==i){
     
                return i;
            }
        }return -1;//注意这个返回值
    }
}

方法二

定义上是使用二分法,也就是每一次都把nums的区间分成左右两部分,尽量往左边的部分找,找不到再在右边的区间按照整个区间的方式进行相同方式的查找。
本方法java代码:

/*参考lc用户 @uTzKlfCv4n 的解答,二分
 *作者@v7fgg
 *执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户
 *内存消耗 :40.3 MB, 在所有 Java 提交中击败了100.00%的用户
 *2020年6月3日 22:57
 */
class Solution {
     
    public int findMagicIndex(int[] nums) {
     
        return moshu(0,nums.length-1,nums);
    }
    public int moshu(int zuo,int you,int[] shuzu){
     
        while(zuo<=you){
     
            int mid=(zuo+you)/2;
            int ans=-1;
            if(shuzu[mid]==mid){
     
                ans=mid;
            }
            int xiaoAns=moshu(zuo,mid-1,shuzu);
            if(xiaoAns!=ans){
     
                return xiaoAns==-1?ans:xiaoAns;
            }
            return moshu(mid+1,you,shuzu);
        }return -1;
    }
}
//参考资料:https://leetcode-cn.com/problems/magic-index-lcci/solution/mo-zhu-suo-yin-by-utzklfcv4n/

你可能感兴趣的:(可爱宝宝做leetcode,leetcode,java)