假設我持有成員具有整數值的串列如下
List<Integer> li = new ArrayList<>();
li.add(1);
li.add(2);
li.add(3);
li.add(4);
li.add(5);
List<Integer> li1 = new ArrayList<>();
li1.add(3);
li1.add(5);
li1.add(6);
li1.add(7);
li1.add(8);
li1.add(9);
我想知道串列是否按升序排序,但任何兩個成員之間的差值是固定的,比如 1。(你可以想象一種“d”為 1 的算術級數)
提出的樸素的解決方案是回圈遍歷串列的所有成員,檢查每個元素[i 1],是否從其中減去元素[i],是否得到1,如下
public static boolean checkSequenceList(List<Integer> li){
for (int i = 0; i < li.size() - 1; i ) {
if (li.get(i 1) - li.get(i) != 1)
return false;
}
return true;
}
有沒有更有效的方法/縮寫的寫作風格來做到這一點?
uj5u.com熱心網友回復:
您如何將陣列中的所有值,然后使用 對陣列進行排序Array.Sort(arrayname),然后它們應該自動按升序排列。如果您只想檢查它,您可以將陣列與排序后的陣列進行比較。
uj5u.com熱心網友回復:
一種方法可能是使用 IntStream。如果將索引和值用作數學函式的 x 和 y 值,如下所示:
x (index) y (list.get(x))
0 4
1 5
2 6
3 7
4 8
5 9
您的要求(它們應該被排序并具有相同的差異)意味著它們應該滿足一個線性函式y = mx b,其中b是索引處串列中的第一個值0并且 m是增量。因此,您可以執行以下操作:
public static boolean checkSequenceList(List<Integer> li, int m){
return IntStream.range(0, li.size()).allMatch(x -> m*x li.get(0) == li.get(x));
}
m如果您關心的 delta 始終是,您可以省略1
public static boolean checkSequenceList(List<Integer> li){
return IntStream.range(0, li.size()).allMatch(x -> x li.get(0) == li.get(x));
}
并且它也會短路,因為allMatch是一個短路終端操作,即如果發現不匹配,您將不會遍歷整個串列。
uj5u.com熱心網友回復:
public boolean checkSequenceList(List<Integer> integerList, int d) {
int lastNum = integerList.get(0);
for (int i = 1; i < integerList.size(); i ) {
Integer integer = integerList.get(i);
if (integer - lastNum != d) {
return false;
}
lastNum = integer;
}
return true;
}
uj5u.com熱心網友回復:
您可以將此代碼用于結果項之間的任何差異。
public class Main {
public static void main(String[] args) {
List<Integer> values = new ArrayList<>();
values.add(3);
values.add(4);
values.add(5);
values.add(6);
values.add(8);
values.add(9);
pairwiseDifference(values);
}
static void pairwiseDifference(List<Integer> values) {
int diff = 0;
for (int i = 0; i < values.size() - 1; i ) {
int curDiff = values.get(i 1) - values.get(i);
if (i == 0)
diff = curDiff;
else if (diff != curDiff) {
System.out.println("Items " values.get(i) " and " values.get(i 1) " have not same difference as previous pair");
return;
}
}
System.out.println("Items have same difference");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489006.html
