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.
38 lines
1.3 KiB
38 lines
1.3 KiB
/*
|
|
从数组中选择尽可能多的元素,只能连续选择,使得相加小于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;
|
|
}
|