大厂笔试题
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

2 weeks ago
  1. /*
  2. 使mn的数组和一个整数
  3. */
  4. #include <iostream>
  5. #include <vector>
  6. using namespace std;
  7. int maxConsecutiveElementsUnderSum(const std::vector<int>& nums, int m) {
  8. int n = nums.size();
  9. int max_count = 0; // 最多选择的元素个数
  10. int current_sum = 0; // 当前窗口内元素的和
  11. int left = 0; // 左指针
  12. // 遍历数组,用右指针表示窗口的右端
  13. for (int right = 0; right < n; ++right) {
  14. current_sum += nums[right]; // 增加当前右指针对应的元素
  15. // 当当前窗口和大于 m 时,收缩左边界
  16. while (current_sum > m && left <= right) {
  17. current_sum -= nums[left]; // 减去左指针的元素
  18. left++; // 左指针右移
  19. }
  20. // 更新最多选择的元素个数
  21. max_count = std::max(max_count, right - left + 1);
  22. }
  23. return max_count;
  24. }
  25. int main() {
  26. vector<int> nums;
  27. int n,m;
  28. cin>>n>>m;
  29. int val;
  30. for(int i = 0; i < n; i++){
  31. cin >> val;
  32. nums.push_back(val);
  33. }
  34. int result = maxConsecutiveElementsUnderSum(nums, m);
  35. cout << result << endl;
  36. return 0;
  37. }