2024年华为OD机试真题- 寻找连续区间-(C++/Java/python)-OD统一考试(C卷D卷)

区间和挑战

  2024华为OD机试真题目录-(B卷C卷D卷)-【C++ Java Python】   

题目描述

给定一个含有 N 个正整数的数组,

求出有多少个连续区间(包括单个正整数),

它们的和大于等于 x 。

输入描述

第一行两个整数 N x (0 < N <= 100000 ,0 <= x <= 10000000)

第二行有 N 个正整数(每个正整数小于等于 100 )。

输出描述

输出一个整数,表示所求的个数。

示例一

输入

3 7

3 4 7

输出

4

说明

3+4 4+7 3+4+7 7 这四组数据都是大于等于 7 的,所以答案为 4

示例二

输入

10 10000000

1 2 3 4 5 6 7 8 9 10

输出

0

考点

逻辑思维

解题思路

遍历数组寻找满足条件的区间:

使用两层循环遍历数组。外层循环以数组中的每个元素作为可能的连续子数组的起始点(索引 i)。内层循环计算从当前起始点 i 到后续任意一个位置 j 的连续子数组的和(用变量 sum 存储)。

判断并累加满足条件的区间数:

在内层循环中,每当子数组的和 sum 大于等于给定的目标值 x 时,说明找到了一个符合条件的连续子数组。

此时,我们将满足条件的连续子数组个数(从i到j,从i到j+1,从i到j+2,……,从i到n-1,这些区间都满足,即:(n-1 )- j+1个区间)累加到结果变量 res 中。

找到一个满足条件的子数组后,跳出内层循环,继续检查下一个可能的起始点。

代码

c++
#include <bits/stdc++.h>
using namespace std;

int main() {
    int x,N;
    cin>>N>>x;
    int sum=0;
    vector<int> vec(N);
    for(int i=0;i<N;i++) {
        cin>>vec[i];
        sum+=vec[i];
    }
    if(sum<x) {
        cout<<0<<endl;
        system("pause");
        return 0;
    }
    int res=0;
    for(int i=0;i<N;i++) {
        int s=0;
        for(int j=i;j<N;j++) {
            s+=vec[j];
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dijkstra2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值