题目描述:

我们把符合下列属性的数组 A 称作山脉:

A.length >= 3

存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]

给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 的 i 的值。

示例1:

输入:[0,1,0]

输出:1

示例2:

输入:[0,2,1,0]

输出:

提示:

3 <= A.length <= 10000

0 <= A[i] <= 10^6

A 是如上定义的山脉

解题思路:

通过分析题目可知,这道题的目的在于找到数组中的这个最大值所在的下标。最简单暴力的方法就是,遍历数组,找到这个最大数,并返回它的下标,实现方法就是不断比较数组中相邻的两个数,当后一个数小于前一个数的时候返回前一个数的下标。

我想到的二中方法时二分查找,这里也采用了一种递归的思想。首先取中间一个数的下标,然后判断这个数是在最大数的左边还是右边,如果是左边,再去左边部分的中间下标,去判断这个中间数是在最大数的左边还是右边,然后继续判断,直到找到这个最大数,这个算法的时间复杂度,远远小于第一种方法。

代码实现(java):

暴力法:

class Solution {

public int peakIndexInMountainArray(int[] A) {

int i = 0;

while (A[i] < A[i+1]) i++;

return i;

}

}

二分查找法:

class Solution {

public int peakIndexInMountainArray(int[] A) {

return find(0,A.length-1,A);

}

public int find(int i,int j,int[] A){

int mid=(i+j)/2;

if(A[mid-1]A[mid+1])

return mid;

else if(A[mid-1]

return find(mid,j,A);

else

return find(i,mid,A);

}

}

本人才疏学浅,若有文中有错误或者有更好的方法,欢迎再评论中指出,共同进步。

java找出最高工资和下标_(java)leetcode852 山脉数组的封顶索引(二分查找法找出数组中最大值的下标)(Peak Index in a Mountain Array)...相关推荐

  1. (java)leetcode852 山脉数组的封顶索引(二分查找法找出数组中最大值的下标)(Peak Index in a Mountain Array)

    题目描述: 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... ...

  2. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  3. C语言:有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数。如果不在数组中,打印“not found”。

    /*有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数.如果不在数组中,打印"not found".*/#include<stdio ...

  4. c语言 有15个数按由大到小,C++ 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。...

    有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,则输出"无此数". 以下是此题的[c++源代码],需要[c ...

  5. 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

    写几个函数: ①输入10个职工的姓名和职工号: ②按职工号由小到大顺序排序,姓名顺序也随之调整: ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名. #i ...

  6. java算法2_二分查找法

    比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...

  7. Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)

    二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...

  8. 二分查找法。Java泛型设计二分查找法。

    前言基础: 1.只能针对有序的数组进行查找. 2.时间复杂度为O(logn). 3.使用前可以先排序,然后再查找,广泛应用于当一大组数据需要频繁查找,于是我们先将其进行排序,然后再通过二分查找进行查找 ...

  9. 学习练习 java 二分查找法

    1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...

  10. 小饶学编程之JAVA SE第一部分——二分查找法

    二分查找法 一.算法描述 二.算法原理 三.算法实现 四.总结 一.算法描述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结 ...

最新文章

  1. CS131专题-4:拟合(最小二乘、RANSAC、霍夫变换)
  2. NLP实践:对话系统技术原理和应用
  3. 应用层下的人脸识别(二):人脸库
  4. 由于采用分时技术 用户可以独占计算机资源,计算机操作系统第1章练习题
  5. 然而毕博淮安的毕博淮安
  6. 信息学奥赛一本通(1030:计算球的体积)
  7. 【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA
  8. MongoDB数据库操作
  9. c++fabs函数_C语言中常用的标准库函数有哪些?
  10. 更新管理器_Excel2016数据透视表06:名称管理器实现透视表的动态更新
  11. 中国联通 光猫 吉比特 G-140W-UG 管理员 账号密码
  12. 蒙牛新品来了,小明纯牛奶透明袋
  13. 呼和浩特php平均工资,2019年内蒙古平均工资出炉
  14. siebel运维管理
  15. Microsoft Word 教程「3」,如何在 Word 中创建项目符号列表、显示字数统计?
  16. 微商如何用百度来进行引流推广?
  17. 对标苹果,小米的漫长激情与征程
  18. 解决0x00000001电脑蓝屏问题
  19. CAPP集成化工艺设计与管理系统
  20. JAVA SE 005——类型转换

热门文章

  1. tomcat处理连接的详细过程
  2. SpringBoot自动装配原理解析
  3. nginx部署静态网站
  4. 【svn】Centos搭建svn服务器环境
  5. C 风格字符串,C++string类,MFC,CString类的区别。
  6. 玩转docker、Swarm、Kubernetes
  7. c语言实验赵欣版答案,赵欣-计算机科学与技术学院
  8. 15000php等于多少人民币,b站多少硬币才相当于1人民币?你一定想不到!
  9. KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]
  10. Linux进程的管理与调度(二)-- Linux的命名空间详解