===更新去掉了遞歸、數組復制,函數返回值改為索引以方便處理空數組的情況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]min=mid;break;}else{if(left==min){min=mid;}left--;}}}returnarr[max]>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]returngetMax(Arrays.copyOfRange(arr,mid,arr.length));}else{left--;}}//comehereonlyifarr[0]toarr[mid]areallthesamereturngetMax(Arrays.copyOfRange(arr,mid,arr.length));}elseif(len==2){returnarr[0]>arr[1]?arr[0]:arr[1];}else{returnarr[0];}}}