java找出最高工资和下标_(java)leetcode852 山脉数组的封顶索引(二分查找法找出数组中最大值的下标)(Peak Index in a Mountain Array)...
题目描述:
我们把符合下列属性的数组 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)...相关推荐
- (java)leetcode852 山脉数组的封顶索引(二分查找法找出数组中最大值的下标)(Peak Index in a Mountain Array)
题目描述: 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- C语言:有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数。如果不在数组中,打印“not found”。
/*有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数.如果不在数组中,打印"not found".*/#include<stdio ...
- c语言 有15个数按由大到小,C++ 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。...
有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,则输出"无此数". 以下是此题的[c++源代码],需要[c ...
- 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
写几个函数: ①输入10个职工的姓名和职工号: ②按职工号由小到大顺序排序,姓名顺序也随之调整: ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名. #i ...
- java算法2_二分查找法
比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...
- Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)
二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...
- 二分查找法。Java泛型设计二分查找法。
前言基础: 1.只能针对有序的数组进行查找. 2.时间复杂度为O(logn). 3.使用前可以先排序,然后再查找,广泛应用于当一大组数据需要频繁查找,于是我们先将其进行排序,然后再通过二分查找进行查找 ...
- 学习练习 java 二分查找法
1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...
- 小饶学编程之JAVA SE第一部分——二分查找法
二分查找法 一.算法描述 二.算法原理 三.算法实现 四.总结 一.算法描述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结 ...
最新文章
- CS131专题-4:拟合(最小二乘、RANSAC、霍夫变换)
- NLP实践:对话系统技术原理和应用
- 应用层下的人脸识别(二):人脸库
- 由于采用分时技术 用户可以独占计算机资源,计算机操作系统第1章练习题
- 然而毕博淮安的毕博淮安
- 信息学奥赛一本通(1030:计算球的体积)
- 【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA
- MongoDB数据库操作
- c++fabs函数_C语言中常用的标准库函数有哪些?
- 更新管理器_Excel2016数据透视表06:名称管理器实现透视表的动态更新
- 中国联通 光猫 吉比特 G-140W-UG 管理员 账号密码
- 蒙牛新品来了,小明纯牛奶透明袋
- 呼和浩特php平均工资,2019年内蒙古平均工资出炉
- siebel运维管理
- Microsoft Word 教程「3」,如何在 Word 中创建项目符号列表、显示字数统计?
- 微商如何用百度来进行引流推广?
- 对标苹果,小米的漫长激情与征程
- 解决0x00000001电脑蓝屏问题
- CAPP集成化工艺设计与管理系统
- JAVA SE 005——类型转换
热门文章
- tomcat处理连接的详细过程
- SpringBoot自动装配原理解析
- nginx部署静态网站
- 【svn】Centos搭建svn服务器环境
- C 风格字符串,C++string类,MFC,CString类的区别。
- 玩转docker、Swarm、Kubernetes
- c语言实验赵欣版答案,赵欣-计算机科学与技术学院
- 15000php等于多少人民币,b站多少硬币才相当于1人民币?你一定想不到!
- KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]
- Linux进程的管理与调度(二)-- Linux的命名空间详解