Cpp 题解:6237 等差数列 (枚举)
"Cpp 题解:6237 等差数列 (枚举)"\n"本题解提供C++代码,使用两重循环枚举所有可能的等差数列起点和终点,并使用二分查找判断等差数列是否合法。时间复杂度为O(n^2logn),空间复杂度为O(1)。"\n"\n"\n"\n"代码:\ncpp\n#include <iostream>\n#include <vector>\n#include <algorithm>\nusing namespace std;\n\nint main() {\n int n;\n cin >> n;\n vector<int> nums(n);\n for (int i = 0; i < n; i++) {\n cin >> nums[i];\n }\n sort(nums.begin(), nums.end()); // 将数组排序\n\n int maxLen = 0; // 最长等差数列的长度\n for (int i = 0; i < n-1; i++) {\n for (int j = i+1; j < n; j++) {\n int diff = nums[j] - nums[i]; // 等差数列的差值\n int len = 2; // 当前等差数列的长度,起始为2\n int next = nums[j] + diff; // 下一个数\n int k = j;\n while (binary_search(nums.begin(), nums.end(), next)) { // 判断下一个数是否存在于数组中\n len++;\n next += diff;\n k = lower_bound(nums.begin(), nums.end(), next) - nums.begin(); // 找到下一个数在数组中的位置\n }\n maxLen = max(maxLen, len); // 更新最长等差数列的长度\n }\n }\n\n cout << maxLen << endl;\n\n return 0;\n}\n\n"\n"首先,我们读入输入的整数n和n个数,并将它们存储在一个vector
原文地址: http://www.cveoy.top/t/topic/qe9N 著作权归作者所有。请勿转载和采集!