从数组中删除两个最大的元素

时间:2017-03-10 08:43:49

标签: java arrays

我可以填充我的阵列,找到两个最大的数字。但是,我无法删除它。你们可以帮助我吗?

  int n = sc.nextInt();
  int [] myArray = new int[n];
  int first = 0;
  int second = 0;
       for(int i = 0; i < myArray.length; i++) {
    int num = sc.nextInt();`
       if (num > first) {
         second = first;
         first = num;
    } else if(num > second) 
      {
      second = num;
      }
     }

   System.out.println("The largest  " + first+ "The second largest  " + second);

5 个答案:

答案 0 :(得分:1)

您可以创建一个新数组(在本例中为$phNo = $_POST['RegPhone']; if (substr($phNo, 0, 1) == "+") { $phNo = ltrim($phNo, '+'); } if (substr($phNo, 0, 1) == "0") { $phNo = ltrim($phNo, '0'); } if (substr($phNo, 0, strlen($_POST['RegDialCode'])) == $_POST['RegDialCode']) { $phNo = ltrim($phNo, $_POST['RegDialCode']); } $phNo = $_POST['RegDialCode']. $phNo; ),其中存储filteredArray中的所有元素,但最大的两个元素。 此外,最好保存两个最大数字的索引而不是它们的值,以便能够更轻松地过滤它们。

这应该有效(你会在myArray找到你想要的数组。)

filteredArray

答案 1 :(得分:1)

如果您使用的是Java 8,您可以对数组进行排序,然后您可以循环抛出数组并将其值设置为另一个,避免使用最后两个Integer,例如:

//Your array
Integer[] array = {8, 99, 6, 336, 2};

//sort your array this can give your [2, 6, 8, 99, 336]
Arrays.sort(array);

//create a new array with the length = array - 2 if the length of array < 2 then 0
Integer[] array2 = new Integer[array.length > 2 ? array.length - 2 : 0];

//copy your array into the array2 avoiding the 2 last
System.arraycopy(array, 0, array2, 0, array.length > 2 ? array.length - 2 : 0);

//print your array, this will print [2, 6, 8]
System.out.println(Arrays.toString(array2));

答案 2 :(得分:1)

对数组进行排序(默认排序为升序,即从最小到最大),然后创建没有最后两个元素的数组的新副本。

if(myArray.length > 2) {
    Arrays.sort(myArray);
    myArray = Arrays.copyOf(myArray, myArray.length-2);
} else {
    throw new IllegalArgumentException("Need moar elements in array!");
}

然后对结果数组执行任何计算。如果您想保留原始数组,请勿在执行myArray时覆盖copyOf()

答案 3 :(得分:1)

您可以简单地对数组进行排序,找到或删除两个最大的元素。

int [] myArray = new int[]{14,5,2,16,18,20};
System.out.println("The original array is "+ " " +Arrays.toString(myArray));
Arrays.sort(myArray);
System.out.println("The sorted array is "+ " " +Arrays.toString(myArray));;

int fisrtmax = myArray[myArray.length-1];
int secondmax = myArray[myArray.length-2];

System.out.println("The first biggest number is " + fisrtmax+ "  The second biggest number is " + secondmax);

int [] arrafterremove= Arrays.copyOf(myArray, myArray.length-2);


System.out.println("The array after removing the two biggest numbers is " + Arrays.toString(arrafterremove));

生成

The original array is  [14, 5, 2, 16, 18, 20]
The sorted array is  [2, 5, 14, 16, 18, 20]
The first biggest number is 20  The second biggest number is 18
Array after removing the two biggest numbers is [2, 5, 14, 16]

答案 4 :(得分:0)

可能以下代码对您有用

again :
for (int i = 0; i < n; i++) 
{            
     if ((a[i] < a[i+1]) && (i+1)<n)  
     {
         temp = a[i];
         a[i] = a[i+1];
         a[i+1] = temp;
         continue again;
     }           
}
System.out.println("The largest  " + a[0] + " & second largest " + a[i]);

如果你想删除其他,那么你可以这样做

for(int i=2; i<n ; i++)
   test = ArrayUtils.remove(a, i);