public class Solution {
//只存在一个峰值
public static Integer findMaxNum(int[] nums) {
if (nums == null || nums.length == 0) {
return null;
}
int len = nums.length;
int i = 0;
int j = len - 1;
while (i <= j) {
int mid = (i + j) >> 1;
int midNum = nums[mid];
int leftNum = mid >= 1 ? nums[mid - 1] : midNum;
int rightNum = mid <= len - 2 ? nums[mid + 1] : midNum;
if (midNum >= leftNum && midNum >= rightNum) {
return midNum;
}
if (leftNum <= midNum && midNum <= rightNum) {
i = mid + 1;
}
if (leftNum >= midNum && midNum >= rightNum) {
j = mid - 1;
}
}
return null;
}
//多个峰值情况,返回一个峰值下标
public int findPeakElement(int[] nums) {
int i = 0, j = nums.length - 1;
while (i < j) {
int mid = (i + j) >> 1;
if (nums[mid] > nums[mid + 1])
j = mid;
else
i = mid + 1;
}
return i;
}
public static void main(String[] args) {
int[][] testArray = {
{1},
{1, 2},
{1, 2, 3},
{3, 2, 1},
{1, 2, 3, 4, 3, 2, 1},
{1, 9, 2},
{1, 9, 8, 7, 6, 5},
{1, 2, 3, 8, 7}
};
for (int[] nums : testArray) {
System.out.println(findMaxNum(nums));
}
}
}
数组中寻找峰值
最新推荐文章于 2024-06-05 08:22:02 发布