在数组中查找小于M个下一个元素的元素

时间:2016-10-18 18:43:29

标签: java arrays algorithm

任务:

在数组中查找元素大小N小于此数组中的M个下一个元素。

Here is algorithm:
a[0]<a[1] => true, then
a[0]<a[2] => false, then
a[2]<a[3] => true, then
a[2]<a[4] => true, then
... => always true
a[2]<a[m+2] => true then return a[2] //a[2] is minumum, m+2<n

我的实施不起作用。循环似乎无穷无尽。

int[] array = new int[]{-1, 2, -3, 5, 0, 6, 9, -1, 5, 7, 8, 1};
int numElements = 5;
int i=0;
int j=1;
int result;

while (i+j < array.length){
if (array[i]<array[i+j]){
     if (i+j == numElements){
       result = array[i];
     } else j++;
   } else {
    i += j;
    j = 1;
    }
  }

我的输出应为-3。

没有当前输出:无限循环。

1 个答案:

答案 0 :(得分:1)

arr[i] < arr[i+j]为假时,您应该......

  1. j重置为1
  2. i设置为i+j
  3. 您还应在while循环条件中添加一项检查,以确保i+j < arr.length

    最后〜从j++块中取出else

    while (i+j < array.length && r){
        if(array[i]<array[i+j]){
            if(i+j == numElements){
                result = array[i];
                r = false;
            }
            ++j;
        }
        else{
            i += j;
            j = 1;
        }
    }
    

    当我在C ++中实现它时,我得到了-3的正确输出。