zoukankan      html  css  js  c++  java
  • leetcode_1095. Find in Mountain Array_[Binary Search]

    https://leetcode.com/problems/find-in-mountain-array/

    题意:给定一个MountainArray(定义见题目),找到其中最早出现的target值的下标。

    MountainArray.get() 函数调用不能超过100次。

    解法:首先使用Binary Search找到mountain的peak,将array分为一个严格递增和一个严格递减的array,然后使用Binary Search。

    class Solution
    {
    public:
        int find_peak(MountainArray &mountainArr)
        {
            int l=0, r=mountainArr.length()-1;
            while(l<=r)
            {
                int m=(l+r)/2;
                int m_val=mountainArr.get(m);
                int m_r_val=mountainArr.get(m+1);
                if(m_val<m_r_val)
                    l=m+1;
                else
                    r=m-1;
            }
            return l;
        }
        int findInMountainArray(int target, MountainArray &mountainArr)
        {
            int peak=find_peak(mountainArr);
            int l=0, r=peak;
            if(mountainArr.get(l)<=target&&mountainArr.get(r)>=target)
                while(l<=r)
                {
                    int m=(l+r)/2;
                    int val=mountainArr.get(m);
                    if(val==target)
                        return m;
                    else if(val<target)
                        l=m+1;
                    else
                        r=m-1;
                }
            l=peak;
            r=mountainArr.length()-1;
            if(mountainArr.get(r)<=target&&mountainArr.get(l)>=target)
                while(l<=r)
                {
                    int m=(l+r)/2;
                    int val=mountainArr.get(m);
                    if(val==target)
                        return m;
                    else if(val<target)
                        r=m-1;
                    else
                        l=m+1;
                }
            return -1;
        }
    };
  • 相关阅读:
    正则表达式(四)--文本换行分割
    java加密类型和算法名称
    记事本记录日志
    DNS
    jstl--c:choose标签
    csv文本编辑引号问题
    JDBC----ReflectionUtils
    Jsp
    计算机网络 编程 总结:
    N颗骰子的问题
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/11072344.html
Copyright © 2011-2022 走看看