/* 从数组中选择尽可能多的元素,只能连续选择,使得相加小于m,求最多可以选择几个数。输入为一个个数为n的数组和一个整数,输出为最多选择元素的个数。 */ #include #include using namespace std; int maxConsecutiveElementsUnderSum(const std::vector& nums, int m) { int n = nums.size(); int max_count = 0; // 最多选择的元素个数 int current_sum = 0; // 当前窗口内元素的和 int left = 0; // 左指针 // 遍历数组,用右指针表示窗口的右端 for (int right = 0; right < n; ++right) { current_sum += nums[right]; // 增加当前右指针对应的元素 // 当当前窗口和大于 m 时,收缩左边界 while (current_sum > m && left <= right) { current_sum -= nums[left]; // 减去左指针的元素 left++; // 左指针右移 } // 更新最多选择的元素个数 max_count = std::max(max_count, right - left + 1); } return max_count; } int main() { vector nums; int n,m; cin>>n>>m; int val; for(int i = 0; i < n; i++){ cin >> val; nums.push_back(val); } int result = maxConsecutiveElementsUnderSum(nums, m); cout << result << endl; return 0; }