BM19. 寻找峰值
描述
示例1
输入:
[2,4,1,2,7,8,4]
输出:
1
说明:
4和8都是峰值元素,返回4的索引1或者8的索引5都可以示例2
输入:
[1,2,3,1]
输出:
2
说明:
3 是峰值元素,返回其索引 2C++ 解法, 执行用时: 33ms, 内存消耗: 8584KB, 提交时间: 2022-06-18
static const auto io_sync_off = []() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); return nullptr; } (); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { int left =0, right = nums.size() - 1; while(right > left){ int mid = (left + right) / 2; if(nums[mid] > nums[mid+1]){ right = mid; }else{ left = mid + 1; } } return left; } };
C++ 解法, 执行用时: 33ms, 内存消耗: 8656KB, 提交时间: 2022-05-18
static const auto io_sync_off = []() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); return nullptr; } (); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { if (nums.size() == 1) return 0; // write code here for (int i = 1; i < nums.size() - 1; i++) { if (nums[i - 1] < nums[i] && nums[i] > nums[i + 1]) return i; } if (nums[nums.size() - 1] > nums[nums.size() - 2]) return nums.size() - 1; return 0; } };
C++ 解法, 执行用时: 35ms, 内存消耗: 8536KB, 提交时间: 2022-06-08
static const auto io_sync_off = [](){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { // write code here int r=nums.size()-1; if(nums[0]>nums[1]) return 0; if(nums[r]>nums[r-1]) return r; for(int i=1;i<r;++i) { if(nums[i]>nums[i+1] && nums[i]>nums[i-1]) { return i; } } return 0; } };
C++ 解法, 执行用时: 36ms, 内存消耗: 8500KB, 提交时间: 2022-06-24
static const auto io_sync_off = [](){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { // write code here int left = 0; int right = nums.size() - 1; while(left < right){ int mid = (left+right) / 2; if(nums[mid] > nums[mid+1]) right = mid; else left = mid + 1; } return right; } // int findPeakElement(vector<int>& nums) { // // write code here // int r=nums.size()-1; // if(nums[0]>nums[1]) return 0; // if(nums[r]>nums[r-1]) return r; // for(int i=1;i<r;++i) // { // if(nums[i]>nums[i+1] && nums[i]>nums[i-1]) // { // return i; // } // } // return 0; // } };
C++ 解法, 执行用时: 36ms, 内存消耗: 8540KB, 提交时间: 2022-08-02
static const auto speedup = []{ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int>& nums) { // write code here int cur; vector<int> r; int index; if(nums.size()<=1) { return 0; } r.push_back(10); for(cur=0;cur<nums.size()-1;cur++) { r.push_back(nums[cur+1]-nums[cur]); } r.push_back(-10); for(cur=0;cur<r.size()-1;cur++) { if(r[cur]>0&&r[cur+1]<0) { index= cur; break;} } return index; } };