我有一长串数字,我想在列表中记录最长的连续数字。
每次数字与前一个数字相差10或更小时,我想增加一个计数器。例如:
1
53
32
74
74
75
75
74
98
2
2
4
3
2
3
1
3
2
74,74,75,75,74将被计算在内,因为彼此之间的距离不到10个。所以这将是5连胜。之后有98和甚至更长的连胜。所以,由于时间较长,计数器需要抛弃之前的连胜,因为它并不是最大的连胜。它基本上重置了。
list of numbers i'm working with: https://pastebin.com/aga6kkq2
这是我目前的代码:
vector<int> numbers;
for (int i = 0; i < numbers.size() - 1; i += 2)
{
cout << numbers[i] << " first set \n" << numbers[i + 1] << " second set " << endl;
int b = numbers[i];
int a = numbers[i + 1];
int difference = b - a;
if (difference <= 10)
{
count++;
if (difference > 10) {
break;
}
}
}
这将得到第一对数字并减去差异,看它是否小于10.我确信这是一种更好的方法。它不准确,并且关闭4.此列表中最长的连续条纹应为140.实现此目的的正确方法是什么?
答案 0 :(得分:1)
vector<int> numbers;
// some code here to add values to the numbers array
int maxStreak = 0;
int counter = 0;
int previousNumber;
int currentNumber;
for (int i= 1; i < numbers.size(); i++)
{
previousNumber = numbers[i - 1];
currentNumber = numbers[i];
if (abs(currentNumber - previousNumber) <= 10) {
counter++;
maxStreak = (counter > maxStreak) ? counter : maxStreak;
}
else {
counter = 0;
}
}
cout << maxStreak;
以下是它的工作原理:
答案 1 :(得分:0)
记住潜在运行的start
索引(最初为0)
从第二个索引开始循环并检查每个对(i++)
计算A[i]
和A[i-1]
的差异(AD)的绝对值
如果AD 太大,则运行结束,因此查找运行长度(i-start)
是否比之前的长度maxlen
再次检查循环结束后的运行长度