class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(std::vector<int>& nums) { int left = 0, right = nums.size() - 1; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] > nums[mid + 1]) { // 思想:当一个数大于左边的值,那么它及它的左边会有一个最大值,相反则它的右边有个最大值 right = mid; // 因为这个赋值的是mid,而不是mid-1所以可能会出现left等于right情况,所以while条件里不能是等于号,而上一个折半查找是mid-1需要用left = right 是最后一个元素的情况,需要进行判断 } else { left = mid + 1; } } return left; } };