Как бы я написал алгоритм, чтобы найти самый большой переход от числа к числу в последовательности? - PullRequest
0 голосов
/ 18 февраля 2020

Если ваша последовательность 4 2 1, самый большой скачок от 4 до 2. Если ваша последовательность 3 10 5 16 8 4 2 1, самый большой скачок от 5 до 16.

Однако я создал алгоритм Я не совсем уверен, что я сделал неправильно (где бы я не сделал l oop правильно, правильно установил свои переменные или что-то еще). Я не уверен, что мне нужно установить мой индекс, BiggestDiff или CurrentDiff тоже. Я пытался использовать некоторое время l oop для сравнения каждого числа в моем векторе, но я получаю ноль (я предполагаю, потому что я установил BiggestDiff на ноль)

Если кто-то может указать мне правильное направление, покажите мне пример или что-то еще, это будет высоко ценится.

Вот мой код ниже

int findBiggestDiff(std::vector<int> sequence)
{
  int index = 0;
  int BiggestDiff = 0 ;
  int CurrentDiff = BiggestDiff;
  CurrentDiff = std::abs(sequence[index] - sequence[index + 1]);
  while (index < sequence.size())
  {
    if (CurrentDiff > BiggestDiff)
    {
      BiggestDiff = CurrentDiff;
    }

    return index;
  }
}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Вы вообще не пересчитываете CurrentDiff. Кроме того, ваше return заявление в неправильном месте. Вы можете сделать что-то вроде этого (не проверено)

int findLargest( const std::vector<int> &sequence ) {
  if ( sequence.size() < 2 ) return -1; // if there's not at least two elements, there's nothing valid.
  int index = 0;
  int biggestIndex = -1;
  int biggestDiff = -1;

  while (index < sequence.size() - 1) // -1 so that the +1 below doesn't go out of range
  {
    // get the current difference
    int currentDiff = std::abs(sequence[index] - sequence[index + 1]);
    if (currentDiff > biggestDiff)
    {
       // update stats
       biggestIndex = index;
       biggestDiff = currentDiff;
    }
    ++index;
  }
  return biggestIndex
}

int main() {
   //…
   int index = findLargest( sequence );
   if ( index != -1 ) {
       std::cout << "Biggest difference was between " << sequence[index] << " and " << sequence[index+1];
   }
}
0 голосов
/ 18 февраля 2020

Попробуйте:

{
    int indexOfBiggestJump = 0;
    int BiggestDiff = 0 ;
    int CurrentDiff = BiggestDiff;

    for(int i = 0; i < sequence.size() - 1; i++) {
        CurrentDiff = std::abs(sequence[i] - sequence[i + 1]);
        if (CurrentDiff > BiggestDiff)
        {
            BiggestDiff = CurrentDiff;
            indexOfBiggestJump = i;
        }
    }
    return indexOfBiggestJump;
}

В вашем коде есть несколько ошибок.

  1. ваш return index буквально ничего не делает, возвращает только index (что будет 0) всегда.

  2. вы не сохраняете индекс самого большого прыжка где-либо.

  3. , если вы ищете позиции i и i + 1, вы должны go до sequence.size() - 1, иначе вы будете выходить за пределы sequence.

...