【週刊】No.83

より大きなパケット位置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;
}

複雑性分析

  • 時間計算: ザ・ n個 O(N)
  • 宇宙の複雑さ: ザ・ 1 O(1)

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;
}

複雑性分析

  • 時間計算: ザ・ N N ) (N \ SQRT {N})
  • 宇宙の複雑さ: O ( 1 ) O(1)

方法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;
}

複雑性分析

  • 時間計算: O ( n ) O(N)
  • 宇宙の複雑さ: O ( 1 ) O(1)

A_04統計サブストリングのユニークな文字

この方法の一つ:


複雑性分析

  • 時間計算: O ( ) ()
  • 宇宙の複雑さ: O ( ) ()

公開された495元の記事 ウォンの賞賛105 ・は 30000 +を見て

おすすめ

転載: blog.csdn.net/qq_43539599/article/details/104845165