この質問について考えた後、数が連続する正の整数のシーケンスの合計で表すことができる場合、正の整数のシーケンス内の要素の数がこの数に関連していることがわかりました。
要素の数が偶数の場合、この数をこの偶数で割ると、得られる値は整数+ 0.5の形式になり、この整数+0.5を次のように持つ連続した正の整数シーケンスで表すことができます。平均値。
奇数の場合、この数をこの奇数で割ると、得られる値は整数になり、この整数を平均値とする一連の正の整数で表すことができます。
次に、連続する負の数のシーケンスを削除します。それだけです。
アイデアとコードはすべて自分で作成されていますが、中央に2次元配列の実装がいくつかあり、他の人が使用する方法は次のとおりです。
List<int[]> res = new ArrayList<int[]>();
return res.toArray(new int[res.size()][]);
これらの2つの文を覚えておいてください。
私のコード
public int[][] findContinuousSequence(int target) {
List<int[]> res = new ArrayList<int[]>();
for(int count = target - 1;count>1;count--){
if(count%2 == 1){
if(target%count == 0){
if(target/count - count/2 >0 && target/count + count/2 < target){
int[] res_part = new int[count];
int count_part = target/count - count/2;
for(int count_inner = 0;count_inner<count;count_inner++){
res_part[count_inner] = count_part + count_inner;
}
res.add(res_part);
}
}
}else if(count%2 == 0){
if(target%count == count/2){
if(target/count + 1 - count/2 >0 && target/count + count/2 < target){
int[] res_part = new int[count];
int count_part = target/count + 1 - count/2;
for(int count_inner = 0;count_inner<count;count_inner++){
res_part[count_inner] = count_part + count_inner;
}
res.add(res_part);
}
}
}
}
return res.toArray(new int[res.size()][]);
}
答えの考え方は異なります.2つのポインターを設定することです.1つは1を表す小さいもので、もう1つは2を表す大きいものです。2つの合計がターゲットよりも小さい場合、大きいものは右にシフトされます、そしてそれが目標よりも大きい場合、小さいものは左にシフトされます。すべてを取得するには、私の方法を比較してください。私の時間はo(n ^ 2)、答えはo(n)、答えはより良いです。