[英]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.