カタリナ:
私は、変換に以下の機能を使用していますsublists
のをlist
に0
し、残りの要素1
がiは、データ構造を変更しようとしていますlist of tuple
。
例えば、関数は、入力を提供[1,2,3,5,10]
します[0,0,0,1,1]
。どのように私はこのような次のような出力を得るために、このデータ構造に変換することができますか[(0,1),(0,2),(0,3),(1,5),(1,10)]
?それとも、可能な場合は別の同様のデータ構造へ?お気に入りlist of two element arrays
public static void main(String[] args) {
int[] arr = { 1, 8, 1, 9, 10 };
// assume arr.length >= 2
boolean asc = arr[1] - arr[0] == 1;
for (int i = 1; i < arr.length - 1; i++) {
if (arr[i + 1] - arr[i] == 1) {
arr[i] = 0;
asc = true;
} else {
if (asc) {
asc = false;
arr[i] = 0;
}
else {
arr[i] = 1;
}
}
}
arr[arr.length - 1] = asc ? 0 : 1;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
ヨアキムダニエルソン:
あなたの値を保持するクラスタプルを作成することができます
public class Tuple {
int first;
boolean second;
public Tuple(int first, boolean second) {
this.first = first;
this.second = second;
}
@Override
public String toString() {
return String.format("(%d, %b)", first, second);
}
}
そして、わずかにそれを使用するようにコードを変更します
final int[] arr = { 1, 8, 1, 9, 10 };
Tuple[] result = new Tuple[arr.length];
boolean asc = arr[1] - arr[0] == 1;
result[0] = new Tuple(arr[0], asc);
for (int i = 1; i < arr.length - 1; i++) {
if (arr[i + 1] - arr[i] == 1) {
asc = true;
} else {
if (asc) {
asc = false;
}
}
result[i] = new Tuple(arr[i], asc);
}
result[arr.length - 1] = new Tuple(arr[arr.length - 1], asc);
for (int i = 0; i < arr.length; i++) {
System.out.println(result[i]);
}
この出力
(1、偽)
(8、偽)
(1、偽)
(9、真)
(10、TRUE)
ループの場合/他の内部おそらく改善することができるが、それは答えに不可欠ではなかったので、私は自分自身を行っていないことを注意