首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从数组中删除两个最大的元素

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

Stack Overflow用户
提问于 2017-03-10 16:43:49
回答 5查看 1K关注 0票数 1

我可以填满我的数组,找到最大的两个numbers.But,我不能删除it.May,你们能帮我吗?

代码语言:javascript
复制
  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);
EN

回答 5

Stack Overflow用户

发布于 2017-03-10 17:05:39

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

代码语言:javascript
复制
//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
EN

Stack Overflow用户

发布于 2017-03-10 17:12:44

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

代码语言:javascript
复制
if(myArray.length > 2) {
    Arrays.sort(myArray);
    myArray = Arrays.copyOf(myArray, myArray.length-2);
} else {
    throw new IllegalArgumentException("Need moar elements in array!");
}

然后在结果数组上执行任何计算。如果你想保留原来的数组,在执行copyOf()时不要覆盖myArray

票数 2
EN

Stack Overflow用户

发布于 2017-03-10 16:55:49

您可以创建一个新数组(在本例中为filteredArray),在其中存储myArray中除最大的两个元素之外的所有元素。此外,最好保存两个最大数字的索引,而不是它们的值,以便能够更容易地筛选出它们。

这应该是可行的(你会在filteredArray中找到你想要的数组)。

代码语言:javascript
复制
int n = sc.nextInt();
int [] myArray = new int[n];
int first = 0;
int second = 0;
for(int i = 0; i < myArray.length; i++) {
    myArray[i] = sc.nextInt();
    if (myArray[i] > myArray[first]) {
        second = first;
        first = i;
    } else if(myArray[i] > myArray[second]) {
        second = i;
    }
}
int [] filteredArray = new int[n-2];
int skipped = 0;
for(int i = 0; i < myArray.length; i++) {
    if(i != first && i != second)
        filteredArray[i - skipped] = myArray[i];
    else
        skipped++;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42713907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档