【LeetCode】162. Find Peak Element (3 solutions)
2014-12-05 23:16
393 查看
Find Peak Element
A peak element is an element that is greater than its neighbors.
Given an input array where
You may imagine that
For example, in array
click to show spoilers.
Note:
Your solution should be in logarithmic complexity.
这题就是求序列最大值。顺序查找或二分查找均可。
满足复杂度要求的话需要用二分查找。
解法一:顺序查找
![](http://images0.cnblogs.com/blog2015/458814/201506/150957569207731.jpg)
解法二:二分查找(递归)
![](http://images0.cnblogs.com/blog2015/458814/201506/151040523107100.jpg)
解法三:二分查找(迭代)
A peak element is an element that is greater than its neighbors.
Given an input array where
num[i] ≠ num[i+1], find a peak element and return its index.
You may imagine that
num[-1] = num = -∞.
For example, in array
[1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.
click to show spoilers.
Note:
Your solution should be in logarithmic complexity.
这题就是求序列最大值。顺序查找或二分查找均可。
满足复杂度要求的话需要用二分查找。
解法一:顺序查找
class Solution { public: int findPeakElement(vector<int>& nums) { int n = nums.size(); if(n == 1) return 0; if(nums[0] > nums[1]) return 0; if(nums[n-1] > nums[n-2]) return n-1; for(int i = 1; i < n-1; i ++) if(nums[i] > nums[i-1] && nums[i] > nums[i+1]) return i; } };
![](http://images0.cnblogs.com/blog2015/458814/201506/150957569207731.jpg)
解法二:二分查找(递归)
class Solution { public: int findPeakElement(vector<int>& nums) { return Helper(nums, 0, nums.size()-1); } int Helper(vector<int>& nums, int low, int high) { if(low == high) return low; int mid = low + (high-low)/2; if(nums[mid] > nums[mid+1]) return Helper(nums, low, mid); else return Helper(nums, mid+1, high); } };
![](http://images0.cnblogs.com/blog2015/458814/201506/151040523107100.jpg)
解法三:二分查找(迭代)
class Solution { public: int findPeakElement(vector<int>& nums) { int low = 0; int high = nums.size()-1; while(low < high) { int mid = low + (high-low)/2; if(nums[mid] > nums[mid+1]) high = mid; else low = mid+1; } return low; } };
![](http://images0.cnblogs.com/blog2015/458814/201506/151045269045811.jpg)
相关文章推荐
- 【LeetCode】104. Maximum Depth of Binary Tree (2 solutions)
- 【LeetCode】96. Unique Binary Search Trees (2 solutions)
- 【LeetCode】12. Integer to Roman (2 solutions)
- [LeetCode] My Solutions in LeetCode Online Judge
- LeetCode Questions List (LeetCode 问题列表)- Java Solutions
- 【LeetCode】115. Populating Next Right Pointers in Each Node (2 solutions)
- 【LeetCode】130. Surrounded Regions (2 solutions)
- 【LeetCode】 Same Tree (2 solutions)
- LeetCode Solutions : Rotate List
- 【LeetCode】145. Binary Tree Postorder Traversal (3 solutions)
- 【LeetCode】40. Combination Sum II (2 solutions)
- 【LeetCode】25. Reverse Nodes in k-Group (2 solutions)
- 【LeetCode】144. Binary Tree Preorder Traversal (3 solutions)
- 【LeetCode】207. Course Schedule (2 solutions)
- 【LeetCode】142. Linked List Cycle II (2 solutions)
- 【LeetCode】338. Counting Bits (2 solutions)
- 【LeetCode】48. Rotate Image (2 solutions)
- 【LeetCode】206. Reverse Linked List (2 solutions)
- 【LeetCode】111. Minimum Depth of Binary Tree (2 solutions)
- 【LeetCode】75. Sort Colors (3 solutions)