当前位置: 首页 > 知识库问答 >
问题:

如何返回数组中最小的两个元素?

呼延渝
2023-03-14

我得到了一个列表

为此,我创建了一个帮助器来查找数组中的最小数字,然后在我的主函数中使用它,我希望在这里使用一个while循环运行到2,因为我需要2个最小的数字,并删除第一个(最小的)数字以查找下一个最小的数字,然后将它们添加到我创建的新数组中。

这是我的代码:

public static int countSorthelper(List<Integer> arr) {
    int temp = 0;
    int n = 0;
    while(n <= 2){
   for (int x = 0; x < arr.size(); x++){
       for (int y = x+1; y < arr.size() && y <= x+y; y++){
           if(arr.get(y) > arr.get(x)){
               temp = arr.get(x);
               n++;
           }
       }
   }
   }
   return temp;

}
public static List<Integer> countSort(List<Integer> arr){
    int n = 0;
    List<Integer> j = new ArrayList<>();
    while (n <= 2){
        countSorthelper(arr);
        arr.remove(countSorthelper(arr));
        j.add(countSorthelper(arr));
        n++;
    }
    return j;
}

当我尝试运行它时,输出由于运行时间过长而终止,我需要在我的代码中进行哪些更改?


共有1个答案

康恩
2023-03-14

无需排序,因为您可以在线性时间内执行此操作。代码应该是不言自明的,但基本上你需要对 min1min2 进行比较,并酌情交换它们的值。您可以在输出中看到这一点。这些值将相等,或者 min1 将是最小的,min2 是下一个最小的

如果你想退货,你可以在记录中退货。

record Minimums(int smallest, int nextSmallest) {}

List<Integer> list = List.of(1,10,2,5,10,-2,22,3,-1);
Minimums mins = findSmallest(list);
System.out.println("\n"+mins);
  • min1发生变化时,min 1将替换min 2
  • 但列表中的下一个值可能大于min1,但小于敏2。因此,需要对敏2进行独立测试
   
public static Minimums findSmallest(List<Integer> list) {
    int min1 = Integer.MAX_VALUE;
    int min2 = Integer.MAX_VALUE;
    for (int val : list) {
        if (val < min1) {
            min2 = min1;
            min1 = val;

        } else if (val < min2) {
            min2 = val;
        }
        System.out.printf("val = %2d : min1 = %2d,  min2 = %2d\n", val,
                min1, min2);
    }
    return new Minimums(min1, min2);
}

指纹

val =  1 : min1 =  1,  min2 = 2147483647
val = 10 : min1 =  1,  min2 = 10
val =  2 : min1 =  1,  min2 =  2
val =  5 : min1 =  1,  min2 =  2
val = 10 : min1 =  1,  min2 =  2
val = -2 : min1 = -2,  min2 =  1
val = 22 : min1 = -2,  min2 =  1
val =  3 : min1 = -2,  min2 =  1
val = -1 : min1 = -2,  min2 = -1

Minimums[smallest=-2, nextSmallest=-1]


 类似资料:
  • 从提供的数组中返回 n 个最小元素。如果 n 大于或等于提供的数组长度,则返回原数组(按降序排列)。 结合使用Array.sort() 与展开操作符(...) ,创建一个数组的浅克隆,并按降序排列。 使用 Array.slice() 以获得指定的元素个数。 忽略第二个参数 n ,默认获取单个元素(以数组的形式)。 const minN = (arr, n = 1) => [...arr].sort

  • 问题内容: 我试图从我的int数组返回两个最大的整数。我能够返回最大和最小的罚款,但无法获得返回两个最大罚款的算法。任何帮助在这里都将不胜感激。 请原谅我的代码中的任何错误。这是一次练习,问题取自去年大学的考试材料。 这是我的代码: 问题答案: 你可以写

  • 从提供的数组中返回 n 个最大元素。如果 n 大于或等于提供的数组长度,则返回原数组(按降序排列)。 结合使用Array.sort() 与展开操作符(...) ,创建一个数组的浅克隆,并按降序排列。 使用 Array.slice() 以获得指定的元素个数。 忽略第二个参数 n ,默认获取单个元素(以数组的形式)。 const maxN = (arr, n = 1) => [...arr].sort

  • 我对mongodb中的聚合概念相对陌生。在我的文档中,有一个数组。我尝试用$match,$unwind,$group来提取数组中有两个给定值的文档。我猜写上去没什么帮助..这是样品 文件: 从这些文档中,我需要提取一个具有“类:1”和“主题[”物理“,”英语“]的文档 所以,如果我正确地编写了查询(或聚合),我应该从上面提取第二个文档。 这是我所拥有的 好吧,上面的聚合没有给我任何反馈,所以我尝试

  • 问题内容: 简介: 就我所能搜索到的而言,尚无此问题。 这是一个面试问题。 我什至没有专门寻找代码解决方案,任何算法/伪代码都可以使用。 问题: 给定一个整数数组及其大小,找到2个最小和的 非后续 元素(在数组中不能相邻)。另外,答案中不得包含第一个或最后一个元素(index 和)。解决方案还应该是 时间和空间的复杂性。 例如,当回答是,因为。 当答案为时,因为和不能选择的任何一个,因为处于数组的

  • 问题内容: 我想返回数组的奇数,但是Eclipse似乎不接受我的返回码。我认为这需要返回整个数组,因为我将数组设置为方法的参数。如前所述,我需要传递一个数组并获取该数组的特定元素作为回报。即使我将该数组设为静态,如何返回单个元素? 编辑:好吧,这里是: 我知道这里可能存在多个错误,但我正在努力,不仅要返回奇数,还要将它们加在一起。 问题答案: 您的代码应如下所示: 这里的要点是方法返回类型,它应该