数组连续和 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

给定一个含有N个正整数的数组,求出有多少连续区间(包括单个正整数),它们的和大于等于 x

输入描述

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

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

输出描述

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

注意:此题对效率有要求,暴力解法通过率不高,请考虑高效的实现方式。

示例1

输入:
3 7
3 4 7输出:
4说明:
第一行的 3表示第二行数组输入3个数,第一行的7是比较数,用于判断连续数组是否大于该数;
组合为 3+4,3+4+7,4+7,7;都大于等于指定的7;所以共四组。

示例2

输入:
10 10000
1 2 3 4 5 6 7 8 9 10输出:
0说明:
所有元素的和小于 10000 ,所以返回 0。

题解

此题可以使用二分查找的方法来解决。

首先计算前缀和数组psum,然后对于每个起始位置s,使用二分查找找到满足条件的第一个右边界r,然后更新结果(累加从s开始连续区间(包括单个正整数)它们的和大于等于x 的个数)。

时间复杂度为O(nlogn),空间复杂度为O(n)。

Java

import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt(), x = in.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = in.nextInt();}long[] psum = new long[n + 1];for (int i = 0; i < n; i++) {psum[i + 1] = psum[i] + a[i]; // 计算前缀和}long rs = 0;for (int s = 0; s < n; s++) {int l = s, r = n;while (l + 1 < r) {int m = (l + r) / 2;if (psum[m] - psum[s] >= x) {r = m; // 更新右边界} else {l = m; // 更新左边界}}// psum[r] - psum[s] == sum(a[s:r])// sum(a[s:r]) >= x 则 从s到 [r ~ n]的区间都满足条件if (psum[r] - psum[s] >= x) {rs += n - r + 1; // 更新结果}}System.out.println(rs);}
}

Python

n, x = map(int, input().split())
a = list(map(int, input().split()))
psum = [0] * (n + 1)for i in range(n):psum[i + 1] = psum[i] + a[i]rs = 0
for s in range(n):l, r = s, nwhile l + 1 < r:m = (l + r) // 2if psum[m] - psum[s] >= x:r = melse:l = m# psum[r] - psum[s] == sum(a[s:r])# sum(a[s:r]) >= x 则 从s到 [r ~ n]的区间都满足条件if psum[r] - psum[s] >= x:rs += n - r + 1print(rs)

C++

#include <bits/stdc++.h>
using namespace std;int main()
{int n, x;cin >> n >> x;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}vector<long long> psum(n + 1, 0LL);for (int i = 0; i < n; i++) {psum[i + 1] = psum[i] + a[i];   // 计算前缀和}long long rs = 0;for (int s = 0; s < n; s++) {int l = s, r = n;while (l + 1 < r) {int m = (l + r) / 2;if (psum[m] - psum[s] >= x) {r = m;   // 更新右边界} else {l = m;   // 更新左边界}}// psum[r] - psum[s] == sum(a[s:r])// sum(a[s:r]) >= x 则 从s到 [r ~ n]的区间都满足条件if (psum[r] - psum[s] >= x) {rs += n - r + 1;   // 更新结果}}cout << rs << endl;return 0;
}

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xcode升级到Xcode15.1或15.2之后,无法新建Category和Extension文件,如何解决?

项目场景&#xff1a; Xcode升级到15.1或15.2之后&#xff0c;无法新建Category和Extension文件&#xff0c;并且Xcode不报任何错误 问题描述 Xcode升级到15.1或15.2之后&#xff0c;无法新建Category和Extension文件&#xff0c;并且Xcode不报任何错误。 具体的操作步骤如下…

【MySQL】 隔离级别和锁机制

事务的四种特性 事务具有四个特征&#xff1a;原子性&#xff08; Atomicity &#xff09;、一致性&#xff08; Consistency &#xff09;、隔离性&#xff08; Isolation &#xff09;和持续性&#xff08; Durability &#xff09;。这四个特性简称为 ACID 特性。 原子性。…

redis-集群 原生部署和工具自动部署

什么redis集群&#xff1f; redis集群是一个提供在多个redis节点之间共享数据的程序集。它并不像redis主从复制模式那样仅提供一个master节点来提供写服务&#xff0c;而是会提供多个master节点来提供写服务&#xff0c;每个master节点中存储的数据都不一样&#xff0c;这些数据…

【保姆级爬虫】微博关键词搜索并获取博文和评论内容(python+selenium+chorme)

微博爬虫记录 写这个主要是为了防止自己忘记以及之后的组内工作交接&#xff0c;至于代码美不美观&#xff0c;写的好不好&#xff0c;统统不考虑&#xff0c;我只能说&#xff0c;能跑就不错了&#xff0c;上学压根没学过python好吧&#xff0c;基本上是crtlc&ctrlv丝滑小…

开启AI绘画新纪元:让创意在指尖绽放

文章目录 一、了解AI绘画的基本原理二、选择合适的AI绘画工具三、掌握AI绘画的基本技巧四、借鉴与创新&#xff1a;从模仿到创作五、参与社区交流&#xff0c;共同成长《AI绘画教程&#xff1a;Midjourney使用方法与技巧从入门到精通》亮点推荐内容简介作者简介目录 在科技日新…

Linux centos 常用的网络负载和网速查看工具和命令

在 CentOS 上查看网络速度和网络负载&#xff0c;可以使用多种工具&#xff0c;以下是一些常用的命令行工具&#xff1a; iftop - 用于实时监视网络带宽使用情况。 安装命令&#xff1a; sudo yum install iftop 使用命令&#xff1a; sudo iftop nload - 一个简单的控制…

Doris-数据分区

数据分区&#xff1a;即将大表划分为小表&#xff0c;数据分区主要有两个级别&#xff1a;Partition和Bucket&#xff08;Tablet&#xff09;。 Partition&#xff1a;逻辑分区&#xff0c;按照一定规则将表按照行进行划分&#xff0c;每个部分就是一个Partition。 Bucket&…

【面试题】Rocketmq面试题总结

为什么使用消息队列&#xff08;如RocketMQ&#xff09;&#xff1f; 异步处理&#xff1a;解耦系统间调用&#xff0c;提高响应速度。解耦&#xff1a;降低模块间的直接依赖&#xff0c;使系统更易于扩展和维护。流量削峰&#xff1a;在高峰期将请求暂时存储起来&#xff0c;…

flink重温笔记(十):Flink 高级 API 开发——flink 四大基石之 State(涉及Checkpoint)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 10 天啦&#xff01;学习了 flink 四大基石之 State &#xff08;状态&#xff09;&#xff0c;主要是解决大数据领域增量计算的效果&#xff0c;能够保存已经计算过的结果数据状态&#xff01;重点学习了 state 的类型划…

相对于 Linux,Windows Server 存在的意义是什么?

相对于 Linux&#xff0c;Windows Server 存在的意义是什么&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux 的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给…

【LeetCode】389_找不同_C

题目描述 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 https://leetcode.cn/problems/find-the-difference/description/ 示例 示例 1&#xff1a; 输…

新版AndroidStudio的Gradle窗口显示task list not built 问题解决

在使用新版AndroidStudio时&#xff0c;会出现&#xff0c;Task List not built 的问题。如果你记得task的名字&#xff0c;当然可以 直接通过命令 gradle taskname 或者 ./gradlew taskName直接执行即可&#xff0c;但是若是记不住&#xff0c;还是把这个任务构建处理比较好用…

借助工具优化开发流程,提升开发体验

背景 最近在做一个demo&#xff0c;只有一个html页面&#xff0c;需要开启一个https web server&#xff0c;以此来实现在浏览器中访问。 改造前 改造前&#xff0c;每次修改文件保存后都要刷新一下浏览器。 如果只是短时间&#xff0c;每次修改后手动刷新浏览器也还行。主要…

C++:Stack和Queue的模拟实现

创作不易&#xff0c;感谢三连&#xff01; 一、容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转换成客户希望的另外一个接口。 就如同是电源适配器将不适用的交流电…

用不了google翻译怎么办?

如果无法使用谷歌翻译&#xff0c;你可以尝试以下方法&#xff1a; 寻找替代服务&#xff1a;可以搜索并了解其他翻译服务&#xff0c;如百度翻译、有道翻译等。这些服务通常提供免费或低价的翻译服务&#xff0c;以满足日常需求。使用本地翻译工具&#xff1a;在某些国家和地…

2k_Day1:今天是设计模式的大白话1

大白话&#xff1a; 原则有一点很难做到&#xff0c;就是定义好的类&#xff0c;只能加不能改&#xff08;开放-关闭原则&#xff09; 1.工厂模式就是&#xff0c;比如你定了一个汽车接口&#xff0c;然后小车、中车、大车都继承这个接口&#xff0c;这时&#xff0c;定一个汽…

在明确自己已经下载好了依赖库,但Vue3引用第三方模块报错Could not find a declaration file for module ***

在 Vue 3 TypeScript 项目中&#xff0c;引入第三方库时&#xff0c;有时会遇到该模块无定义文件的问题。通常&#xff0c;我们可以尝试以下两种方式解决: 方法 1: 使用 require 语句 在 TypeScript 文件中&#xff0c;使用 require 语句来代替 import 语句&#xff0c;例如…

day04-Maven

一、初识 Maven Maven 是 Apache 旗下的一个开源项目&#xff0c;是一款用于管理和构建 java 项目的工具。 官网&#xff1a;https://maven.apache.org/ Maven的作用 依赖管理&#xff08;方便快捷的管理项目依赖的资源(jar包)&#xff0c;避免版本冲突问题&#xff09;统一项目…

想开发苹果群控软件?先了解这些代码!

随着智能设备的普及&#xff0c;群控软件的需求日益增加&#xff0c;特别是针对苹果设备的群控软件&#xff0c;因其出色的性能和广泛的用户基础&#xff0c;受到了开发者们的青睐。 然而&#xff0c;开发一款功能强大的苹果群控软件并非易事&#xff0c;需要深入了解苹果的开…

获取C语言语句对应的汇编码和机器指令

借助IDE的调试功能 以CodeBlocks为例&#xff0c;先设置断点&#xff0c;然后点击红色三角形调试。 然后选择Debug➡ Debugging Windows➡Disassembly 就可以看到了 使用命令行 在工程文件中&#xff0c;一般可以找到一个.o文件。如果没有&#xff0c;可以先在program.c的目录下…