zoukankan      html  css  js  c++  java
  • 1095. 山脉数组中查找目标值

    在这里插入图片描述
    在这里插入图片描述

    二分查找

    • 使用二分查找查找山脉数组的峰值位置
    • 将数组以峰值位置为分界线分为左右两部分,并分别使用二分查找查询目标值

    二分查找就是每次查找将范围缩小一半

    /**
     * // This is MountainArray's API interface.
     * // You should not implement it, or speculate about its implementation
     * interface MountainArray {
     *     public int get(int index) {}
     *     public int length() {}
     * }
     */
     
    class Solution {
        public int findInMountainArray(int target, MountainArray mountainArr) {
            int n = mountainArr.length();
            int left = 0, right = n-1;
            while (left < right) {
                int mid = (left + right) / 2;
                if (mountainArr.get(mid) < mountainArr.get(mid + 1)) {
                    left = mid + 1;
                } else {
                    right = mid;
                }
            } 
            int peek = left;
            int index = binarySearch(target, mountainArr, 0, peek, true);
            if (index != -1) {
                return index;
            }
            return binarySearch(target, mountainArr, peek + 1, n - 1, false);
        }
    
        // flag true:递增 false: 递减
        private int binarySearch(int target, MountainArray mountainArr, int left, int right, boolean flag) {
            if (!flag) {
                target *= -1;
            }
            while (left <= right) {
                int mid = (left + right) / 2;
                int cur = mountainArr.get(mid) * (flag ? 1 : -1);
                if (cur > target) {
                    right = mid - 1;
                } else if (cur < target) {
                    left = mid + 1;
                } else {
                    return mid;
                }
            }
            return -1;
        }
    }
    
  • 相关阅读:
    [学习记录]Flask会话维护
    [学习记录]MarkDown语法
    [学习记录]jinja2模板语法
    [学习记录]flask资源加载
    [学习记录]flask初步
    [常用操作]使用github桌面版上传代码
    [学习记录]简明扼要的Sass
    接口Mock测试
    12 | 从0到1:你的第一个GUI自动化测试
    navicat导出DDL语句
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13859904.html
Copyright © 2011-2022 走看看