簡體   English   中英

如何使用Java查找給定序列數組列表中的Missing Elements?

[英]How to find the Missing Elements in a given sequence array list using java?`

1.我有一個帶有起始元素和arraylist限制的Integer數組列表。 范例[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);
            }
        }

誰能幫我解決這個問題?

您正在將每個元素與1進行比較

if("1".equals(value))

相反,您應該保留一個計數器,該計數器將從列表的第一個元素開始,然后再遞增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 timespace for time ,是否使用取決於您的實際需求。

嘗試,

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);
}

通過從數組中獲取第一個和最后一個元素,您可以知道數組的開始和結束,並通過對該限制進行迭代,可以獲取缺少的數字,如下所示:

    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+")");
    }

正如我們已經知道first元素和last元素已經存在於last中一樣,不需要檢查,因此我們僅檢查first和last元素之間是否存在元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM