如何使用java在给定的序列数组列表中找到缺失元素?`

时间:2016-04-28 04:56:39

标签: java arrays arraylist

1.我有一个带有起始元素和arraylist限制的整数数组列表。 例[5,6,9,10]

2.我必须迭代并找到缺失的元素及其位置。  根据上面的例子,我的输出应该是数字7(位置3),数字8(位置4)缺失。

3.现在我打印所有数字而不是丢失缺失的元素。

以下是代码:

 public static List<Integer> issue_ret=new ArrayList<>();
    Iterator<Integer> iter = issue_ret.iterator();
        while(iter.hasNext()){
            int value = iter.next();
            if("1".equals(value)){
                iter.remove();
            }
            else{
                System.out.println("Missing value:"+value);
            }
        }

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

您正在将每个元素与1

进行比较
if("1".equals(value))

相反,您应该保留一个计数器,该计数器将从您的列表第一个元素开始,然后递增1并执行与此计数器的比较。

答案 1 :(得分:1)

建议您采用比ArrayList.contains()更有效的方式,但更有限:

    ArrayList<Integer> list = new ArrayList<>(Arrays.asList(new Integer[]{5, 6, 9, 10}));

    int head = list.get(0);
    int tail = list.get(list.size() - 1);

    int length = tail - head + 1;
    int[] array = new int[length];

    for (int i : list) {
        array[i - head] = 1;
    }

    for (int i = 0; i < array.length; i++) {
        if (array[i] == 0) {
            System.out.println(String.format("Missing %d, position %d", i + head, i + 1));
        }
    }

限制是:顶部整数不应该太大。无论如何,这是space for time方式,是否使用取决于您的实际需要。

答案 2 :(得分:0)

尝试,

List<Integer> integerList = new LinkedList<Integer>();
integerList.add(5);
integerList.add(6);
integerList.add(9);
integerList.add(10);
int first = integerList.get(0);
int last  = integerList.get(integerList.size()-1);
for(int i=first+1; i<last; i++){
    if(!integerList.contains(i))
          System.out.println("Number Not in List : "+i);
}

答案 3 :(得分:0)

通过从数组中获取第一个和最后一个元素,您可以知道数组的开始和结束,并通过迭代超过该限制,您可以得到如下所示的数字:

    List<Integer> input = new ArrayList<Integer>();
    input.add(5);
    input.add(8);
    int firstElement = input.get(0);
    int lastElement  = input.get(input.size()-1);
    for(int i=firstElement+1, j=2; i<lastElement-1; i++,j++){
        if(!input.contains(i))
              System.out.println("Missing Number : "+i + "(position " + j+")");
    }

正如我们已经知道的那样,第一个元素和最后一个元素已经存在于最后,不需要检查,所以我们只检查第一个元素和最后一个元素之间存在的元素。