建设厅网站的无法打印,网站集群系统 如何做域名解析,网络营销推广的技巧有哪些,中国做二手房最大的网站有哪些文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目
1、题目描述
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值…
文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目
1、题目描述
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums找到峰值元素并返回其索引。数组可能包含多个峰值在这种情况下返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] nums[n] -∞ 。
你必须实现时间复杂度为 O(log 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。 2、基础框架
C版本给出的基础框架如下
3、原题链接
https://leetcode.cn/problems/find-peak-element/
二、解题报告
1、思路分析 (1)(1)(1)易证如果nums[i] nums[i1]那么[0…i]区间内肯定存在峰值。如果nums[i] nums[i1],那么[i…nums.length-1]区间内肯定存在峰值。 (2)(2)(2)所以该问题具有二分性如果是nums[mid]nums[mid1]那么丢弃[i1…r]即r mid. (3)(3)(3)如果nums[mid]nums[mid1]那么就丢弃[l…i]即l mid 1 (4)(4)(4)二分的出口条件是l r,即l一旦等于r就会结束循环所以mid不会大于r即mid1不会有越界问题。
2、时间复杂度
时间复杂度为O(logn)
3、代码详解
class Solution {
public:int findPeakElement(vectorint nums) {int l 0;int r nums.size() - 1;while(l r) {int mid l (r - l) / 2;if (nums[mid] nums[mid1]) {r mid;}else l mid 1;}return r;}
};三、本题小知识