ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

285,寻找峰值

2021-06-14 22:53:06  阅读:204  来源: 互联网

标签:return nums int 寻找 峰值 high low 285 mid1


峰值元素是指其值大于左右相邻值的元素。

给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。

数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞。

示例 1:

输入: nums = [1,2,3,1]
输出: 2
解释: 3 是峰值元素,你的函数应该返回其索引 2。

示例 2:

输入: nums = [1,2,1,3,5,6,4]
输出: 1 或 5 
解释: 你的函数可以返回索引 1,其峰值元素为 2;     或者返回索引 5, 其峰值元素为 6。

答案:

1public int findPeakElement(int[] nums) {
2    for (int i = 1; i < nums.length; i++) {
3        if (nums[i] < nums[i - 1]) {
4            return i - 1;
5        }
6    }
7    return nums.length - 1;
8}

解析:

代码很容易理解,如果当前值比前一个大,则继续寻找下一个,直到下一个比它小的为止,因为前一个是比他小的,当后一个再比它小的时候,他就是峰值。我们还可以通过二分法的方式来查找

 1public int findPeakElement(int[] nums) {
2    int low = 0;
3    int high = nums.length - 1;
4    while (low < high) {
5        int mid1 = (low + high) / 2;
6        int mid2 = mid1 + 1;
7        if (nums[mid1] < nums[mid2])
8            low = mid2;
9        else
10            high = mid1;
11    }
12    return low;
13}

这个如果能看懂,也算是半个高手了,每次比较的时候都是拿中间的值和中间的下一个值进行比较,然后再缩小查找数组的范围,每次缩小的结果是要么high比它右边的大,要么low比它左边的大,直到low等于high的时候,我们可以说low比它左边相邻的大,并且比它右边相邻的也大。或者我们也可以使用递归的方式

 1public int findPeakElement(int[] nums) {
2    return Helper(nums, 0, nums.length - 1);
3}
4
5int Helper(int[] nums, int low, int high) {
6    if (low == high)
7        return low;
8    int mid1 = (low + high) / 2;
9    int mid2 = mid1 + 1;
10    if (nums[mid1] > nums[mid2])
11        return Helper(nums, low, mid1);
12    else
13        return Helper(nums, mid2, high);
14}

标签:return,nums,int,寻找,峰值,high,low,285,mid1
来源: https://blog.51cto.com/u_4774266/2902488

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有