有序陣列a經過一次旋轉處理,也可能沒有旋轉,且a中肯能存在重複的數字。例如有序陣列[1,2,3,4,5,6]可以旋轉處理成[4,5,6,1,2,3];特例一,[1,2,3,4,4,4,4,4,4]旋轉成[4,4,4,4,4,1,2,3,4];特例二,[1,2,3,4,4,4,4,4,4]旋轉成[4,1,2,3,4,4,4,4,4];特例三,[1,1,1,1,1,2,3]旋轉成[1,2,3,1,1,1,1]。
package com.lancq.array;
/** * @author lancq
* @description
* @date 2018/11/4
**/public class arraytest ;
int a2 = new int;
int a3 = new int;
int a4 = new int;
int a5 = new int;
int a6 = new int;
int a7 = new int;
system.out.println("遞迴查詢旋轉陣列中的最小值:");
system.out.println(findmininrotatedarray(a,0, a.length-1));
system.out.println(findmininrotatedarray(a2,0, a2.length-1));
system.out.println(findmininrotatedarray(a3,0, a3.length-1));
system.out.println(findmininrotatedarray(a4,0, a4.length-1));
system.out.println(findmininrotatedarray(a5,0, a5.length-1));
system.out.println(findmininrotatedarray(a6,0, a6.length-1));
system.out.println(findmininrotatedarray(a7,0, a7.length-1));
system.out.println("非遞迴查詢旋轉陣列中的最小值:");
system.out.println(findmininrotatedarray2(a));
system.out.println(findmininrotatedarray2(a2));
system.out.println(findmininrotatedarray2(a3));
system.out.println(findmininrotatedarray2(a4));
system.out.println(findmininrotatedarray2(a5));
system.out.println(findmininrotatedarray2(a6));
system.out.println(findmininrotatedarray2(a7));
}/**
* 遞迴:查詢旋轉陣列中的最小值
* 有序陣列a經過一次旋轉處理,也可能沒有旋轉,且a中肯能存在重複的數字。
* 例如有序陣列[1,2,3,4,5,6]可以旋轉處理成[4,5,6,1,2,3];
* 特例一,[1,2,3,4,4,4,4,4,4]旋轉成[4,4,4,4,4,1,2,3,4];
* 特例二,[1,2,3,4,4,4,4,4,4]旋轉成[4,1,2,3,4,4,4,4,4];
* 特例三,[1,1,1,1,1,2,3]旋轉成[1,2,3,1,1,1,1]
* @param a
* @param left
* @param right
* @return
*/public static int findmininrotatedarray(int a, int left, int right)
int mid = left + (right - left)/2;
if(a[left] > a[mid]) else if(a[left] < a[mid]) else
}/**
* 非遞迴:查詢旋轉陣列中的最小值
* 有序陣列a經過一次旋轉處理,也可能沒有旋轉,且a中肯能存在重複的數字。
* 例如有序陣列[1,2,3,4,5,6]可以旋轉處理成[4,5,6,1,2,3];
* 特例一,[1,2,3,4,4,4,4,4,4]旋轉成[4,4,4,4,4,1,2,3,4];
* 特例二,[1,2,3,4,4,4,4,4,4]旋轉成[4,1,2,3,4,4,4,4,4];
* 特例三,[1,1,1,1,1,2,3]旋轉成[1,2,3,1,1,1,1]
* @param a
* @return
*/public static int findmininrotatedarray2(int a)
//說明陣列在 a[low] 至 a[high] 上沒有旋轉
if(a[low] < a[high])
mid = (low + high) / 2;
//說明最小值在a[low] 至 a[mid]之間
if(a[low] > a[mid])
//說明最小值在a[mid] 至 a[high]之間
if(a[mid] > a[high])
//特殊情況 a[low]==a[mid]==a[high]
while(low < mid) else if(a[low] < a[mid]) else }}
return math.min(a[low],a[high]);
}}
在有序旋轉陣列中找到最小值
題目 有序陣列arr可能經過一次旋轉處理,也可能沒有,且arr可能存在重複的數。例如,有序陣列 1,2,3,4,5,6,7 可以旋轉處理成 4,5,6,7,1,2,3 等。給定乙個可能旋轉過的有序陣列arr,返回arr中的最小值。基本思路 盡可能的利用二分查詢,但是最壞情況仍然無法避免o n 的時間...
在有序旋轉陣列中找到最小值
在有序旋轉陣列中找到最小值 有序陣列arr可能經過一次旋轉處理,也可能沒有,且arr可能存在重複的數。例如,有序陣列 1,2,3,4,5,6,7 可以旋轉處理成 4,5,6,7,1,2,3 等。給定乙個可能旋轉過的有序陣列arr,返回arr中的最小值。要求 期望複雜度為o log n o log n...
有序旋轉陣列最小值
題目 有序陣列arr可能經過一次旋轉處理,也可能沒有,且arr可能存在重複的數。例如,有序陣列 1,2,3,4,5,6,7 可以旋轉處理成 4,5,6,7,1,2,3 等。給定乙個可能旋轉過的有序陣列arr,返回arr中的最小值。根據題目分析 有序指公升序 旋轉處理將公升序陣列分成前後兩部分,進行整...