【LeetCode从零单刷】Find Peak Element

题目:

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

Given an input array wherenum[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 thatnum[-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.

Note:

Your solution should be in logarithmic complexity.

解答:

难度在于时间复杂度,需要是对数时间。又是搜索题,很自然会想到二分搜索。

我们来看中间位置发生的情况:

如果是1……2,3,2……9,那么很自然可以返回3所在的位置作为一个峰值点;如果是1……2,3,4……9,那么可以肯定峰值点出现在后半部分:3,4……9中;如果是1……4,3,2……9,那么可以肯定峰值点出现在前半部分:1……4,3中;如果仅剩两个数,峰值点在更大的数的位置;如果仅剩一个数,就返回其位置

class Solution {public:int findPeakElement(vector<int>& nums) {int range = nums.size() – 1;if((range/2 – 1 >= 0) && (range/2 + 1 <= range)){if((nums[range/2] > nums[range/2 – 1]) && (nums[range/2] > nums[range/2 + 1])){return (range/2);}else if(nums[range/2] < nums[range/2 – 1]){vector<int> tmp(nums.begin(), nums.begin() + range/2);return findPeakElement(tmp);}else if(nums[range/2] < nums[range/2 + 1]){vector<int> tmp(nums.begin() + range/2, nums.end());return (range/2 + findPeakElement(tmp)); // 注意基础位置的偏移量}}else{if(range == 0) return 0;if(range == 1){if(nums[0] > nums[1]) return 0;elsereturn 1;}}}};

版权声明:本文为博主原创文章,,转载请联系我的新浪微博 @iamironyoung

微风吹过,海面上金光闪闪,泛起一道道美丽的浪花,

【LeetCode从零单刷】Find Peak Element

相关文章:

你感兴趣的文章:

标签云: