You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart新手求助:如何查找数组中的最小值与第二小值?

在Dart中查找数组的最小值与第二小值

作为Dart新手,这里给你两种实用的实现方式,分别兼顾效率和易理解性:

方法一:单次遍历法(高效推荐)

这种方法只需要遍历数组一次,时间复杂度为O(n),适合处理大数组。核心思路是用两个变量分别记录最小值和第二小值,遍历过程中动态更新它们:

void findMinAndSecondMin(List<int> arr) {
  // 先处理数组长度不足的情况
  if (arr.length < 2) {
    print('数组至少需要包含2个元素');
    return;
  }

  // 初始化最小值和第二小值为整数最大值
  int min1 = int.maxFinite;
  int min2 = int.maxFinite;

  for (int num in arr) {
    if (num < min1) {
      // 当前数比最小值更小,把原最小值移给第二小值,更新最小值
      min2 = min1;
      min1 = num;
    } else if (num < min2 && num != min1) {
      // 当前数比第二小值小,但不等于最小值时更新第二小值
      // 如果允许第二小值和最小值重复(比如数组[1,1,2]的第二小是1),可以去掉`num != min1`的判断
      min2 = num;
    }
  }

  // 处理所有元素都相同的情况
  if (min2 == int.maxFinite) {
    print('所有元素相同,最小值和第二小值都是:$min1');
  } else {
    print('最小值:$min1,第二小值:$min2');
  }
}

// 测试示例
void main() {
  findMinAndSecondMin([5, 3, 8, 1, 2, 1]); // 输出:最小值:1,第二小值:2
  findMinAndSecondMin([2, 2, 2]); // 输出:所有元素相同,最小值和第二小值都是:2
  findMinAndSecondMin([10, 1]); // 输出:最小值:1,第二小值:10
}

方法二:排序法(简单易上手)

如果你更在意代码的简洁性和易理解性,可以先给数组排序,再取前两个符合要求的元素。这种方法时间复杂度为O(n log n),适合小范围数组:

void findMinAndSecondMinWithSort(List<int> arr) {
  if (arr.length < 2) {
    print('数组至少需要包含2个元素');
    return;
  }

  // 创建数组副本避免修改原数组,然后排序
  List<int> sortedArr = List.from(arr)..sort();
  int min1 = sortedArr[0];
  int min2 = min1;

  // 找到第一个不等于最小值的元素
  for (int i = 1; i < sortedArr.length; i++) {
    if (sortedArr[i] != min1) {
      min2 = sortedArr[i];
      break;
    }
  }

  print('最小值:$min1,第二小值:$min2');
}

// 测试示例
void main() {
  findMinAndSecondMinWithSort([5, 3, 8, 1, 2, 1]); // 输出:最小值:1,第二小值:2
  findMinAndSecondMinWithSort([2, 2, 2]); // 输出:最小值:2,第二小值:2
  findMinAndSecondMinWithSort([10, 1]); // 输出:最小值:1,第二小值:10
}

注意事项

  • 必须先判断数组长度是否小于2,否则会出现索引越界或逻辑错误
  • 如果业务允许第二小值和最小值重复(比如数组全是同一个数),记得调整判断条件

内容的提问来源于stack exchange,提问作者Mohmed Ashraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:20:33