猿问

一个数组先升序再降序,用最优时间复杂度,求最大值?例如[1,2,2,2,2,3,1]

一个数组先升序再降序,求最大值?例如[1,2,2,2,2,3,1],用最优时间复杂度,算法实现获取最大值3
江户川乱折腾
浏览 829回答 2
2回答

慕的地10843

===更新去掉了递归、数组复制,函数返回值改为索引以方便处理空数组的情况publicclassMaxFinder{publicstaticvoidmain(String[]args){int[]arr={2,3,3,3,7,13,22};System.out.println(arr[getMaxPos(arr)]);}publicstaticintgetMaxPos(int[]arr){intlen=arr.length;if(len>=2){intmin=0,max=len-1;//最大值位置的索引范围闭区间intmid,left;while(max-min>1){mid=min+(max-min)/2;left=mid-1;while(left>=min){if(arr[left]>arr[mid]){max=left;break;}elseif(arr[left]arr[min]?max:min;}elseif(len==1){return0;}else{return-1;}}}===原答案publicclassTest{publicstaticvoidmain(String[]args){int[]arr={1,2,2,2,2,3,1};System.out.println(getMax(arr));}publicstaticintgetMax(int[]arr){intlen=arr.length;if(len>2){intmid=len/2,left=mid-1;while(left>=0){if(arr[left]>arr[mid]){returngetMax(Arrays.copyOfRange(arr,0,left+1));}elseif(arr[left]arr[1]?arr[0]:arr[1];}else{returnarr[0];}}}

慕侠2389804

/***使用二分查找法*@paramarr:先升序在降序的数组*@paramlow:数组最小的索引*@paramhigh:数组最大的索引*@return:返回数组中的最大值*/publicstaticintgetMax(int[]arr,intlow,inthigh){while(low>1);if(arr[mid]>arr[mid+1]){high=mid;}elseif(arr[mid]=low)//防止数组范围越界[low~high]{if(arr[mid-1]>arr[mid]){high=mid-1;}elseif(arr[mid-1]two?one:two;}}else{//如果mid-1
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答