You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
从数组中选择尽可能多的元素,只能连续选择,使得相加小于m,求最多可以选择几个数。输入为一个个数为n的数组和一个整数,输出为最多选择元素的个数。 */ #include <iostream>
#include <vector>
using namespace std; int maxConsecutiveElementsUnderSum(const std::vector<int>& 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<int> 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; }
|