博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Find Peak element leetcode
阅读量:6120 次
发布时间:2019-06-21

本文共 1574 字,大约阅读时间需要 5 分钟。

Find Peak element

A peak element is an element that is greater than its neighbors.

Given an input array where num[i] ≠ num[i+1], find a peak element and

return its index.

The array may contain multiple peaks, in that case return the index to

any one of the peaks is fine.

You may imagine that num[-1] = num[n] = -∞.

For example, in array [1, 2, 3, 1], 3 is a peak element and your

function should return the index number 2.

遍历法

思路

遍历数组, 如果一个数大于他的左右两边, 那么就是peak element

复杂度

时间O(n) 空间 O(1)

代码

public int findPeakElement(int[] nums) {    if (nums == null || nums.length == 0) {        return -1;    }    if (nums.length == 1) {        return 0;    }    for (int i = 0; i < nums.length; i++) {        if (i == 0 && nums[i] > nums[i + 1]) {            return i;        }        if (i == nums.length - 1 && nums[i - 1] < nums[i]) {            return i;        }        if ( i > 0 && i < nums.length - 1 && nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) {            return i;        }    }    return - 1;}

二分法

思路

如果一个数小于他左边的数说明正在下坡, peak element在左边; 如果小于右边的数说明正在上坡, peak 在右边. 另外一种情况就是它即不小于左边也不小于右边, 此时本身就是peak element

复杂度

时间O(logn) 空间O(1)

代码

public int findPeakElement(int[] nums) {    int left = 0, right = nums.length - 1;    while (left + 1 < right) {        int mid = left + (right - left) / 2;        if (nums[mid] < nums[mid - 1]) {            right = mid;        } else if (nums[mid] < nums[mid + 1]) {            left = mid;        } else {            return mid;        }    }    if (nums[left] > nums[right]) {        return left;    } else {        return right;    }}

转载地址:http://ammka.baihongyu.com/

你可能感兴趣的文章
阿里巴巴的AI算法程序媛是怎样的一种存在?
查看>>
access key 笔记
查看>>
小轮子:无需重构,向下兼容,在既有项目中用vue的方式开发微信小程序
查看>>
dayjs 源码解析(四)(Dayjs 类)
查看>>
【大数据实践】Kafka生产者编程(2)——producer发送流程
查看>>
聊聊eureka server的instance注册及元数据变更接口
查看>>
webpack源码分析之一:文件打包
查看>>
微信网页授权
查看>>
排序算法总结
查看>>
Docker零基础入门指南(三):Docker Hello World
查看>>
SpringMVC之源码分析--ViewResolver(一)
查看>>
Python之浅谈exec()函数
查看>>
以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台...
查看>>
历史记录管理(window.history)
查看>>
强大的 String.format() 快速介绍
查看>>
css scrollbar样式设置
查看>>
Python爬虫学习之(三)| 快速入门正则表达式
查看>>
从零开始配置 Nginx + HTTPS
查看>>
算法题解:从数组中搜索和为x的三元组
查看>>
webpack 填坑之路--提取独立文件(模块)
查看>>