簡體   English   中英

Java 檢查增量/減量模式

[英]Java check for increment/decrement pattern

我的問題/問題(兩者都是真的)是我想通過列表檢查 Java 中的增量模式。

我的意思基本上是說我有一個包含 10 個浮點數(或雙打,或 whintnot)樣本的列表,其中包含以下值:

3.2675781、3.2800293、3.232666、3.1662598、3.0898438、3.0302734、3.0253906、2.9074707、2.934368127

請注意它是如何從小>大>小>小>小等開始的?

如果可能,我如何檢測這種模式以及最有效的方法是什么。

謝謝!

你只需要一個通用的方法來做到這一點。

這個想法是采用自定義Comparator來比較類型,或者您的類型應該是可比較的(應該實現Comparable )。

以下代碼顯示了這一點:

public <T extends Comparable<T>> boolean checkPattern(List<T> list) {
    return checkPattern(list, T::compareTo);
}

public <T> boolean checkPattern(List<T> list, Comparator<T> comparator) {
    // assuming null/empty/list with 1 element satisfy the pattern
    if (list == null || list.size() == 0 || list.size() == 1)
        return true;
    if (comparator.compare(list.get(0), list.get(1)) >= 0)
        return false;
    for (int i = 1; i < list.size() - 1; i++) {
        T current = list.get(i);
        T next = list.get(i + 1);
        if (comparator.compare(current, next) <= 0) {
            System.out.println(current + " " + next);
            return false;
        }
    }
    return true;
}

你可以這樣稱呼它:

System.out.println(new Test().checkPattern(Arrays.asList(3.2675781, 3.2800293, 3.232666, 3.1662598, 3.0898438, 3.0302734, 3.0253906, 2.9074707, 2.9343262, 2.9179688)));

這個輸出將是:

false

因為2.9074707 < 2.9343262

談到效率,上述解決方案的漸近復雜度是O(n) ,其中n是輸入列表中的元素數。 我們不能做得比這更好,因為我們需要訪問列表的每個元素(除了最后一個)以檢查是否滿足條件。

暫無
暫無

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

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