写了一些代码,试图在无序数组中找到最大元素,然后从数组中删除它。我的第一个循环具有找到最大元素的逻辑,而第二个循环应该从第一个循环中获取变量,向前看一个空格然后插入到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;
}
}
}
}
答案 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);
编辑: 好吧没有意识到你正在使用 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;