首页 > 编程知识 正文

函数极大值的定义,函数极大值怎么求

时间:2023-05-04 14:46:07 阅读:256752 作者:1602

Find Peak Element 题目来源:
leetcode 162

线性算法

#include <stdio.h>#include <vector>using namespace std;int findPeakElement(vector<int>& nums) { if (nums.size()==1) { return 0; } for (int i=1; i<nums.size()-1; i++) { if (nums[i]>nums[i-1]&&nums[i]>nums[i+1]) { //先不处理两边界的值(第一个和最后一个) return i; } } if (nums[0]>nums[1]) { //处理左边界 return 0; } else if (nums[nums.size()-1]>nums[nums.size()-2]) { //处理右边界 return nums.size()-1; } return 0;} 二分查找算法

#include <stdio.h>#include <vector>using namespace std;int findPeakElement(vector<int>& nums) { if (nums.size()==1) { return 0; } int start = 0; int end = nums.size()-1; int mid; while (start<end) { // 注意:该处是start<end;而不是一般的start<=end; mid = (start+end)/2; if (nums[mid]<nums[mid+1]) { // 当在mid点,函数是单调递增时,最大值点一定在mid点之后,所以start=mid+1;而不是start=mid start = mid+1; } else{ //当在mid点往后是单调递减时,最大值点在mid处,或者在mid点之前;所以end=mid;而不是end=mid-1; end = mid; } } return start; //最终start和end相遇,返回改相遇点就是函数最大值}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。