查找数组中未使用的值

时间:2018-09-21 16:49:08

标签: java algorithm sorting

我正在用Java编写一个函数,以找出数组中的第一个可用(未使用)值。范围是0到999。

例如,

  

{1,3,4,10}->可用0,2,5

     

{0,1,3,4,10}->可用2,5

当不存在0时,我的功能有效。如何在两种情况下都可以使用?

public class Values{

 public static void main(String []args){
     int myArrray[] = {0,1,3,4,10};
     int temp = 0;
     int index = 0;
     int available = 0;
    for (int i = 0; i < myArrray.length; i++) 
    { 
        if(temp == 0 && myArrray[i] != temp ){
        available =  temp;
        System.out.println("value of temp: " + temp);
        System.out.println("value of available time: " + available);
        System.out.println("value of index: " + i);                
        }
        else if(myArrray[i] - temp > 1 ){
        available =  temp + 1;
        temp = available;
        System.out.println("value of temp: " + temp);
        System.out.println("value of available time: " + available);
        System.out.println("value of index: " + i);
       }
       else{

       }
     temp = myArrray[i];  
    } 

 }
}

结果

-value of temp: 0 
-value of available time: 0
-value of index: 1
-value of temp: 2
-value of available time: 2
-value of index: 2
-value of temp: 5
-value of available time: 5
-value of index: 4

1 个答案:

答案 0 :(得分:0)

根据您对问题的描述,{1,3,4,10}的输出应该是{0,2,5,11},范围是0到999,不是吗?

static void available(int[] arr, int min, int max)
{
  for (int j=0, i=0; j<=max; j=arr[i]+1, i++)
  {
    if (j >= min && (i==arr.length || j < arr[i]))
      System.out.printf("%d ", j);
    if(i == arr.length) break;
  }
  System.out.println("\n");
}

测试:

public static void main(String[] args)
{
  int[][] tests = {
      {1,3,4,10},
      {0,1,3,4,10},
      {1,3,4,999},
  };

  for(int[] test : tests) 
  {
    System.out.println(Arrays.toString(test));
    available(test, 0, 999);
  }
}

输出:

[1, 3, 4, 10]
0 2 5 11 

[0, 1, 3, 4, 10]
2 5 11 

[1, 3, 4, 999]
0 2 5