Поиск уникальных комбинаций последовательных чисел в массиве - PullRequest
0 голосов
/ 21 сентября 2018

Итак, у меня есть отсортированный массив, например [1,2,3,8,9,10] или [1,1,2,2,3,3] или [1,3,4,5,6,7] и я хочу найти уникальные комбинации из 3+ последовательных чисел.Так что это может быть в приведенных выше примерах (1,2,3) и (8,9,10), или (1,2,3) (1,2,3) (1,2,3) или (3, 4,5,6,7).

Итак, я написал что-то, что будет работать для двух последовательных чисел, но я не уверен, как я буду искать 5 последовательных чисел, затем 4 последовательных числа и затем 3. Также, как бы вы справились с числамиэто то же самое.

Будет ли здесь работать рекурсия?

for (int i = 0; i < 5; i++) {
        for (int j = i+1; j<5; j++) {
            if (array[i] == array[j] - 1) {
                score++;
                break;
            }
        }
    }

1 Ответ

0 голосов
/ 21 сентября 2018

Это будет работать, если нет повторяющихся цифр:

static List<List<Integer>> seqCombos(List<Integer> a)
{
  List<List<Integer>> seqs = new ArrayList<>();
  for(int j=0, i=1; i<=a.size(); i++)
  {
    if(i == a.size() || a.get(i)-1 != a.get(i-1))
    {
      if(i - j >= 3) 
        seqs.add(a.subList(j, i));
      j = i;
    }
  }
  return seqs;
}

Тест:

public static void main(String[] args)
{    
  Integer[][] tests = 
    {
      {1, 2, 3, 8, 9, 10},
      {1, 3, 4, 5, 6, 7},
    };

  for(Integer[] test : tests)
  {
    System.out.println(Arrays.asList(test));
    List<List<Integer>> seqs = seqCombos(Arrays.asList(test));
    for(List<Integer> seq : seqs) 
      System.out.println(seq);
    System.out.println();
  }
}

Выход:

[1, 2, 3, 8, 9, 10]
[1, 2, 3]
[8, 9, 10]

[1, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7]

Если есть повторяющиеся цифры, товсе становится намного сложнее.Мне даже не ясно, каково правило, так как я не вижу, как вы получаете (1,2,3) (1,2,3) (1,2,3) из [1,1,2,2, 3,3]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...