より大きなパケット位置C_01
方法a:ダブルポインタ
我々はR聞かせて同じ文字++、異なる文字にLRポイントにLとRのポイントは、我々は値RL> = 3かどうかを確認してください。
- 注:そこ極端なケース[、A]であり、そして最後= 3 R、L = 0ループ終了は、最後の状態がこれを取り込むことができません。
public List<List<Integer>> largeGroupPositions(String S) {
List<List<Integer>> group = new LinkedList<>();
char[] s = S.toCharArray();
int N = s.length;
int l = 0, r = l;
while (r < N) {
if (s[l] == s[r]) {
r++;
} else {
if (r - l >= 3) {
List<Integer> item = new LinkedList<>();
item.add(l);
item.add(r-1);
group.add(item);
}
l = r;
}
}
if (r - l >= 3) {
List<Integer> item = new LinkedList<>();
item.add(l);
item.add(r-1);
group.add(item);
}
return group;
}
複雑性分析
- 時間計算: 、
- 宇宙の複雑さ: 、
B_02
この方法の一つ:
複雑性分析
- 時間計算: 、
- 宇宙の複雑さ: 、
B_03連続した整数の合計
方法1:列挙期間と(タイムアウト)
ウィンドウの最後の値がnに等しい場合、ウィンドウR Lを定義し、構成し、その後、私たちはそれぞれの状態と列挙のための私の窓を蓄積させ、このウィンドウの証拠として使用することができる答えがあります。
public int consecutiveNumbersSum(int N) {
int cnt = 0;
for (int r = 1; r <= N; r++) {
int n = N, l = r;
while (n > 0) {
n -= l;
l++;
}
if (n == 0)
cnt++;
}
return cnt;
}
複雑性分析
- 時間計算:
- 宇宙の複雑さ: 、
方法2:法律を見つけます
public int consecutiveNumbersSum(int N) {
int cnt = 0;
for (int i = 1; N > 0; N -= i, i++) {
cnt += (N % i == 0 ? 1 : 0);
}
return cnt;
}
複雑性分析
- 時間計算: 、
- 宇宙の複雑さ: 、
A_04統計サブストリングのユニークな文字
この方法の一つ:
複雑性分析
- 時間計算: 、
- 宇宙の複雑さ: 、