• [8.3] Magic Index


    A magic index in an array A[0...n-1] is defined to be an index such that A[i] = i. Given a sorted array of distinct integers, write a method to find a magic index, if one exists, in array A.

    FOLLOW UP

    What if the values are not distinct?

        public int getMagicIndex(int[] inputs) {
            return helper(0, inputs.length - 1, inputs);
        }
    
        private int helper(int start, int end, int[] inputs) {
            if(end < start)
                 return -1;
            int mid = (end - start) / 2 + start;
            if(mid == inputs[mid]) {
                return mid;
            } else if (mid > inputs[mid]) {
                return helper(mid + 1, end, inputs);
            } else {
                return helper(start, mid - 1, inputs);
            }
        }

    Follow Up: 看答案的

        /**
         * 
         * A magic index in an array A[0...n-1] is defined to be an index such that A[i] = i. 
         * Given a sorted array of distinct integers, write a method to find a magic index, if one exists, in array A.
         * 
         * FOLLOW UP
         * What if the values are not distinct?
         * 
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] inputs = {-11, -9, -3, -3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 16};
            System.out.println(getMagicIndex(inputs));
        }
    
        public static int getMagicIndex(int[] inputs) {
            return helper(0, inputs.length - 1, inputs);
        }
    
        private static int helper(int start, int end, int[] inputs) {
            if(end < start)
                 return -1;
    
            int midIndex = (end - start) / 2 + start;
            int midValue = inputs[midIndex];
            
            if(midIndex == midValue) {
                return midIndex;
            } else {
                // Search left
                int leftIndex = Math.min(midIndex - 1, midValue);
                int left = helper(start, leftIndex, inputs);
                if(left > 0) {
                    return left;
                }
                // Search right
                int rightIndex = Math.max(midIndex + 1, midValue);
                return helper(rightIndex, end, inputs);
            }
        }
  • 相关阅读:
    Mysql添加远程访问权限
    Android下安装应用不成功解决
    Unity 编译apk启动出异常
    Java 实现函数回调
    C# 实现函数回调
    北京数字认证无领导小组讨论总结
    深圳市共进电子 嵌入式软件工程师笔试题
    北京君正和博彦科技笔试体会及总结
    9月5日 华为2014校园招聘的机试题目_C语言版答案
    ios客户端base64上传图片到java服务器遇到的问题
  • 原文地址:https://www.cnblogs.com/Phoebe815/p/6144446.html
Copyright © 2020-2023  润新知