Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在旋转数组中查找最小值。了解执行情况_Java_Arrays_Algorithm - Fatal编程技术网

Java 在旋转数组中查找最小值。了解执行情况

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

有一个旋转数组,我们需要在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 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
左侧的情况