删除数组中的max元素

时间:2015-02-20 18:06:40

标签: java arrays

写了一些代码,试图在无序数组中找到最大元素,然后从数组中删除它。我的第一个循环具有找到最大元素的逻辑,而第二个循环应该从第一个循环中获取变量,向前看一个空格然后插入到max元素中。

我的下面的代码似乎适用于我的第二个想法..但找不到合适的max数组元素。

我的数组具有以下值{6,3,5,2,7,9,4}。它发现max数组元素为7 ..它应该是9。

   public void deleteMax() {
  // set value for comparison starting from the beginning of the array 
  int arrayMax = arr[0]; 

  for (int i = 0; i < nElems; i++) {
     if (arr[i] > arrayMax) {
        arrayMax = arr[i];

        for (int k = i; k < nElems; k++) {
           arr[k] = arr[k + 1];
           nElems--;

           break;
         }
      }
   }  
}

4 个答案:

答案 0 :(得分:1)

为什么不使用jQuery $ .grep&amp; Math.max喜欢:

var arr = [6, 3, 5, 2, 7, 9, 4];
var maxNum = Math.max.apply(null, arr);

var newArr = $.grep( arr, function( n ) {
  return n != maxNum;
});
console.log(newArr);

Fiddle

编辑: 好吧没有意识到你正在使用 Java 作为JavaScript部分中显示的问题......

在Java中,您可以在数组中找到最大数字,如

int maxNum = arr.get(0); // get the first number in array
for (int i = 1; i < arr.length; i++) {
    if ( arr.get(i) > maxNum) {
      maxNum = array.get(i);
    }
}
arr.remove(maxNum);

答案 1 :(得分:0)

嗯,你不需要任何第二次循环。

只有一个循环和两个变量叫做f.ex. MaxElementPosition和MaxElementValue,如果此位置上的数字大于最后一个MaxElementValue,则每次在循环内更新,更新值和位置。

虽然循环确实需要比较值。最后你只需要这个职位。

答案 2 :(得分:0)

你的内部循环是无关紧要的,你只有一维数组,所以进行任何内部迭代是没有意义的。

如果你坚持在数组上不执行sorting,那么你可以这样做:

public void deleteMax() {
   // set value for comparison starting from the beginning of the array 
   int arrayMax = arr[0]; 
   int maxIndex = 0;

   for (int i = 0; i < nElems; i++) {
       if (arr[i] > arrayMax) {
          arrayMax = arr[i];
          maxIndex = i;
       }
   }

   arr.remove(maxIndex);
}

for循环结束后,我们会删除maxIndex

中的项目

答案 3 :(得分:0)

@Alex是在正确的轨道上,但是没有可以在java中的数组上调用的删除函数。你需要的只是他得到的变量maxIndex,当然这将是这个最大值的第一次出现,所以如果你需要删除每个出现的最大值,那将是一个不同的问题。所以一旦你使用@Alex代码:

int arrayMax = arr[0]; 
int maxIndex = 0;

for (int i = 0; i < nElems; i++) {
   if (arr[i] > arrayMax) {
      arrayMax = arr[i];
      maxIndex = i;
   }
}

如果不使用数组,那么使用ArrayList会更容易,在这种情况下代码看起来像:

int arrayMax = arr.get(0); 
int maxIndex = 0;

for (int i = 0; i < nElems; i++) {
   if (arr[i] > arrayMax) {
      arrayMax = arr[i];
      maxIndex = i;
   }
}
arr.remove(maxIndex);

否则你必须创建一个临时数组来删除值:

int[] temp = new int[arr.length-1];
    for(int i = 0, index = 0; index < nElems; i++, index++)
    {
        if(index == maxIndex) index++;
        temp[i] = arr[index];
    }
    arr = temp;