162:寻找峰值
This commit is contained in:
parent
c59a203627
commit
04ecc22559
71
src/main/java/leetcode/editor/cn/FindPeakElement.java
Normal file
71
src/main/java/leetcode/editor/cn/FindPeakElement.java
Normal file
@ -0,0 +1,71 @@
|
||||
//峰值元素是指其值大于左右相邻值的元素。
|
||||
//
|
||||
// 给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
|
||||
//
|
||||
// 你可以假设 nums[-1] = nums[n] = -∞ 。
|
||||
//
|
||||
//
|
||||
//
|
||||
// 示例 1:
|
||||
//
|
||||
//
|
||||
//输入:nums = [1,2,3,1]
|
||||
//输出:2
|
||||
//解释:3 是峰值元素,你的函数应该返回其索引 2。
|
||||
//
|
||||
// 示例 2:
|
||||
//
|
||||
//
|
||||
//输入:nums = [1,2,1,3,5,6,4]
|
||||
//输出:1 或 5
|
||||
//解释:你的函数可以返回索引 1,其峰值元素为 2;
|
||||
// 或者返回索引 5, 其峰值元素为 6。
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 提示:
|
||||
//
|
||||
//
|
||||
// 1 <= nums.length <= 1000
|
||||
// -231 <= nums[i] <= 231 - 1
|
||||
// 对于所有有效的 i 都有 nums[i] != nums[i + 1]
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 进阶:你可以实现时间复杂度为 O(logN) 的解决方案吗?
|
||||
// Related Topics 数组 二分查找
|
||||
// 👍 466 👎 0
|
||||
|
||||
package leetcode.editor.cn;
|
||||
|
||||
//162:寻找峰值
|
||||
class FindPeakElement {
|
||||
public static void main(String[] args) {
|
||||
//测试代码
|
||||
Solution solution = new FindPeakElement().new Solution();
|
||||
}
|
||||
|
||||
//力扣代码
|
||||
//leetcode submit region begin(Prohibit modification and deletion)
|
||||
class Solution {
|
||||
public int findPeakElement(int[] nums) {
|
||||
int start = 0;
|
||||
int end = nums.length - 1;
|
||||
int mid = (start + end) / 2;
|
||||
while (mid < nums.length - 1 && mid > 0) {
|
||||
if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) {
|
||||
return mid;
|
||||
} else if (nums[mid] > nums[mid - 1]) {
|
||||
mid++;
|
||||
} else {
|
||||
mid--;
|
||||
}
|
||||
}
|
||||
return nums.length == 1 || nums[0] > nums[1] ? 0 : nums.length - 1;
|
||||
}
|
||||
}
|
||||
//leetcode submit region end(Prohibit modification and deletion)
|
||||
|
||||
}
|
38
src/main/java/leetcode/editor/cn/FindPeakElement.md
Normal file
38
src/main/java/leetcode/editor/cn/FindPeakElement.md
Normal file
@ -0,0 +1,38 @@
|
||||
<p>峰值元素是指其值大于左右相邻值的元素。</p>
|
||||
|
||||
<p>给你一个输入数组 <code>nums</code>,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 <strong>任何一个峰值</strong> 所在位置即可。</p>
|
||||
|
||||
<p>你可以假设 <code>nums[-1] = nums[n] = -∞</code> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = <code>[1,2,3,1]</code>
|
||||
<strong>输出:</strong>2
|
||||
<strong>解释:</strong>3 是峰值元素,你的函数应该返回其索引 2。</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = <code>[</code>1,2,1,3,5,6,4]
|
||||
<strong>输出:</strong>1 或 5
|
||||
<strong>解释:</strong>你的函数可以返回索引 1,其峰值元素为 2;
|
||||
或者返回索引 5, 其峰值元素为 6。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 1000</code></li>
|
||||
<li><code>-2<sup>31</sup> <= nums[i] <= 2<sup>31</sup> - 1</code></li>
|
||||
<li>对于所有有效的 <code>i</code> 都有 <code>nums[i] != nums[i + 1]</code></li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>进阶:</strong>你可以实现时间复杂度为 <code>O(logN)</code><em> </em>的解决方案吗?</p>
|
||||
<div><div>Related Topics</div><div><li>数组</li><li>二分查找</li></div></div>\n<div><li>👍 466</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user