我将如何编写算法来找到序列中从数字到数字的最大跳跃?
Posted
技术标签:
【中文标题】我将如何编写算法来找到序列中从数字到数字的最大跳跃?【英文标题】:How would I write an algorithm to find the greatest jump from number to number in a sequence? 【发布时间】:2020-02-18 17:04:38 【问题描述】:如果你的序列是4 2 1
,最大的跳跃是从4到2。如果你的序列是3 10 5 16 8 4 2 1
,最大的跳跃是从5到16。
我已经制作了一个算法,但是我不完全确定我做错了什么(无论我没有正确地制作循环,正确地设置我的变量,或者其他什么)。我也不确定设置索引、BiggestDiff 或 CurrentDiff 需要什么。我尝试使用 while 循环来比较向量中的每个数字,但我得到零(我假设是因为我将 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;
【问题讨论】:
在你的 while 循环中,你不是在计算CurrentDiff
......你在里面做一个 return
......
您还需要记住给您带来最大差异的两个数字。
如果对您有帮助,请考虑接受答案。
【参考方案1】:
试试这个:
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;
您的代码中有几个错误。
你的 return index
真的什么都不做,只返回 index
(将是 0)总是。
你没有保存最大跳跃的索引。
如果你正在寻找i
和i + 1
的位置,你必须一直到sequence.size() - 1
,否则你会超出sequence
的范围。
【讨论】:
您应该解释或注释您的代码如何解决 OP 的问题。【参考方案2】:您根本没有重新计算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];
【讨论】:
以上是关于我将如何编写算法来找到序列中从数字到数字的最大跳跃?的主要内容,如果未能解决你的问题,请参考以下文章