162.寻找峰值

时游小于 1 分钟LeetCode

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

上次编辑于:
贡献者: 15327360835
Loading...