162.寻找峰值
小于 1 分钟
162.寻找峰值
/*
* @lc app=leetcode.cn id=162 lang=typescript
*
* [162] 寻找峰值
*/
// @lc code=start
/* 时间复杂度O(n) */
/*
function findPeakElement(nums: number[]): number {
if (nums.length === 1) return 0;
if (nums[0] > nums[1]) return 0;
if (nums[nums.length - 1] > nums[nums.length - 2]) return nums.length - 1;
// 以上过滤特殊情况
for (let i = 0; i < nums.length; i++) {
if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) {
return i;
}
}
return -1;
}
*/
/* 时间复杂度O(log n) */
function findPeakElement(nums: number[]): number {
if (nums.length === 1) return 0;
if (nums[0] > nums[1]) return 0;
if (nums[nums.length - 1] > nums[nums.length - 2]) return nums.length - 1;
// 以上过滤特殊情况
let l = 0,
r = nums.length - 1;
while (l <= r) {
let mid = Math.floor((l + r) / 2);
if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) {
return mid;
} else if (nums[mid] < nums[mid - 1]) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return -1;
}
console.log(findPeakElement([1, 2, 3]));
// @lc code=end
Loading...
