繁体   English   中英

如何在 Dart 或 Java 中找到给定数组范围内的最小缺失数

[英]How to find smallest missing number in range with given array in Dart or Java

想象一下,你有一个从 1 到 6 的范围和数组 arr = [1,2,3] 如何编写好的算法,其中 function 将根据数组中的数据返回此范围内可能的最小缺失数,这意味着:

input: arr[1, 2, 3]
output: 4 is smallest missing

或者

input: arr[2, 3, 4]
output: 1 is smallest missing
  • 如果没有缺失的数字 function 可以给 output 7,没关系。
  • 如果数组以某种方式为空,您可能会返回 1。

我尽力使用来自www.geeksforgeeks.com的一些代码,但这对我没有帮助。 如果您在 Java 中编写代码也没关系,但 Dart 是我正在研究的语言

非常感谢您提前提供帮助!

简化使用循环

void main() {
  //passing empty list
  print(smallestMissingNumber([]));
  //missing 3
  print(smallestMissingNumber([1,2,4,5,6,7,8]));
  //no missing element
  print(smallestMissingNumber([1,2,3,4,5,6]));
}

int smallestMissingNumber(List<int> list){
  int i = 1;
  for(; i<= list.length; i++){
    if(!list.contains(i)){
      break;
    }
  }
  return i;
}

Output:

1
3
7

伪代码 -> 转换为 java

Create a range array from [1,2,3,4,5,6].
Fetch your input array [2,3,4] whatever    
Iterate you range array and check if the number exists in input array.
First missing number is the smallest number.
void main(List<String> args) {
  final universe = List<int>.generate(10, (i) => i + 1);
  final input = [1,3,6];
  var minMissing = universe.toSet().difference(input.toSet()).reduce((cur, next) => cur < next ? cur : next);
  print(minMissing);
}

结果:

2

你可以尝试这样的事情。

Arrays.sort(arr);
int smallestMissing =-1;
for(int i=0;i<arr.length;i++){
   if(arr[i]!=i+1){
      smallestMissing = i+1;
      break;
   }
}
if(smallestMissing==-1){
   smallestMissing = arr.length;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM