• 1.4.20双调查找。如果一个数组中的所有元素是先递增后递减的,则称这个数组为双调的。编写一个程序,给定一个含有N 个不同int 值的双调数组,判断它是否含有给定的整数。程序在最坏情况下所需的比较次数为~3lgN


    思路先找出最大值,然后分割进行二分查找;

    private static int q1_4_20(int[] N, int key) {
            int l = 0;
            int r = N.length - 1;
            int aims = 0;
            //找最大值
            while (l < r) {
                aims = l + ((r - l) >> 1);
                if (N[aims] > N[aims - 1] && N[aims] < N[aims + 1]) {
                    l = aims;
                } else if (N[aims] < N[aims - 1] && N[aims] > N[aims + 1]) {
                    r = aims;
                } else {
                    break;
                }
            }
            //左边
            int left = 0;
            int right = aims;
            int mid;
            while (left <= right) {
                mid = left + ((right - left) >> 1);
                if (N[mid] > key) {
                    right = mid - 1;
                } else if (N[mid] < key) {
                    left = mid + 1;
                } else {
                    return mid;
                }
            }
            //右边,大小反过来排列,和上面不一样
            left = aims;
            right = N.length - 1;
            while (left <= right) {
                mid = left + ((right - left) >> 1);
                if (N[mid] < key) {
                    right = mid - 1;
                } else if (N[mid] > key) {
                    left = mid + 1;
                } else {
                    return mid;
                }
            }
            return -1;
        }
  • 相关阅读:
    有效获取状态栏(StatusBar)高度
    各种数据库连接
    Spring AOP 原理
    Spring ioc 原理
    转载的别人的ajax跨域解决方法
    如何监听input的脚本赋值
    JAVA之Socket编程
    JAVA中的多线程
    JAVA文件操作
    实验三 kali下metasploit的漏洞攻击实践
  • 原文地址:https://www.cnblogs.com/junalncer/p/12778586.html
Copyright © 2020-2023  润新知