寻找峰值

1.规则:给定一个长度为n的数组nums,请你找到峰值并返回其索引,数组中可能包含多个峰值,在这种情况下,返回任何一个所在位置即可

例如:输入[1,3,5,2,4,6]时,会形成两个山峰,一个是索引为2,峰值为5的山峰,另一个是索引为5,峰值为6的山峰

2.思路:(1).暴力求解法:当数组中只有一个元素时,其索引为元素下标,若数组中元素为升序,其索引为最大元素下标,若数组存在多个峰值时,只需返回升序断裂时的最大下标

(2).二分思路:把数组分为两部分,若中间元素大于右边首元素,说明左边存在一个峰值,将right向左靠拢,其中间元素本身也可能为最大值,right=mid,若中间元素大于左边首元素,说明右边存在一个峰值,将left向右靠拢,left=mid+1,利用循环依次遍历即可找出其峰值

3.暴力求解法

int lin(int* nums, int numsLen ) {//防止越界比较if(numsLen==1){return 0;}//第一峰值for(int i=0;inums[i+1]){return i;}}return numsLen-1;
}

4.二分思路

int lin(int *nums, int numsLen){//第一个元素为峰值if(nums==1||nums[0]>nums[1]){return 0;}//最后一个元素为峰值if(nums[numsLen-1]>nums[numsLen-2]){return numsLen-1;}//查找多个峰值int left=0,right=numsLen-1,mid=0;while(left


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部