Java 在旋转数组中查找最小值。了解执行情况
有一个旋转数组,我们需要在log n time中找到它的min元素。我找到了几种解决方案,但其中一种我无法理解:Java 在旋转数组中查找最小值。了解执行情况,java,arrays,algorithm,Java,Arrays,Algorithm,有一个旋转数组,我们需要在log n time中找到它的min元素。我找到了几种解决方案,但其中一种我无法理解: public int findMin(int[] nums) { if(nums==null || nums.length==0) return -1; int i=0; int j=nums.length-1; while(i<=j){ // Sorted (sub)array. We just retur
public int findMin(int[] nums) {
if(nums==null || nums.length==0)
return -1;
int i=0;
int j=nums.length-1;
while(i<=j){
// Sorted (sub)array. We just return its first element.
if(nums[i]<=nums[j])
return nums[i];
int m=(i+j)/2;
if(nums[m]>=nums[i]){
i=m+1; // The pivot is in the right subarray. So we go right
}else{
j=m; // m is the index of the pivot. Why don't we just return it?
}
}
return -1;
}
public int findMin(int[]nums){
if(nums==null | | nums.length==0)
返回-1;
int i=0;
int j=nums.length-1;
而(i在您描述的情况下,nums[m]
不一定是最小元素
例如,如果数组是[6,7,1,2,3,4,5]
,在第一次迭代中我们得到:
i=0
,j=6
,m=3
nums[m]=2
,这比nums[i]
,但显然不是最小值。你说的“枢轴”是什么意思,为什么你认为m
是它的索引?枢轴是数组围绕其旋转的元素。我认为m
是枢轴的索引,因为枢轴可以是m
或m
右侧的元素。为什么不能在左侧?因为它已经在if(nums[I]中处理过了再看一看这个比较。m
不在这里。谢谢,我只是忘记了枢轴在m
左侧的情况