大厂真题:【模拟】OPPO2023秋招提前批-小欧数组求和

2023-10-15 11:52

本文主要是介绍大厂真题:【模拟】OPPO2023秋招提前批-小欧数组求和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述与示例

题目描述

小欧拿到了一个数组,她有q次操作,每次操作修改一个元素。小欧希望每次修改后得到当前数组所有元素之和。你能帮帮她吗?

输入描述

第一行输入两个正整数nq,代表数组的大小和操作次数。

第二行输入n个正整数ai,代表小欧拿到的初始数组。

接下来的q行,每行输入两个正整数ix,代表将第i个元素修改为x

输出描述

输出q行,每行输出一个正整数,代表当前数组元素之和。

示例

输入

5 3
1 2 3 4 5
2 3
3 3
5 1

输出

16
16
12

说明

第一次修改后,数组变成[1,3,3,4,5],元素之和为16

第二次修改后,数组变成[1,3,3,4,5],元素之和为16

第三次修改后,数组变成[1,3,3,4,1],元素之和为12

解题思路

本题属于非常简单的模拟题。

对于某一次特定的修改,假设我们已知上一次修改后的数组和nums_sum,而本次修改将nums[i]修改为x,那么修改后的和应该为nums_sum-nums[i]+x。而此处修改后的和又可以作为下一次修改的上一次修改后的数组和来使用,即存在

nums_sum = nums_sum - nums[i] + x

需要被在本次修改后输出。同时nums[i]需要修改为x。上述核心代码为

nums_sum -= nums[i]
nums_sum += x
nums[i] = x

本题要特别注意,题目最后q行输入的索引值是从1开始的,故映射到数组的索引值,必须进行i -= 1的修改。

代码

Python

# 题目:【模拟】OPPO2023秋招提前批-小欧数组求和
# 作者:闭着眼睛学数理化
# 算法:模拟
# 代码有看不懂的地方请直接在群上提问# 数组长度n,操作次数q
n, q = map(int, input().split())
# 初始数组nums
nums = list(map(int, input().split()))
# 计算初始数组nums的和
nums_sum = sum(nums)
# 储存q次修改的结果
ans = list()# 循环q次,修改q次
for _ in range(q):# 修改的位置i和修改的内容xi, x = map(int, input().split())# 注意i输入表示的是第i个元素,将其改为索引需要-1i -= 1# 将nums[i]修改为x,则整体的和需要减少nums[i],增加xnums_sum -= nums[i]nums_sum += x# 同时nums[i]被修改为xnums[i] = x# 将本次修改后的数组和nums_sum储存在ans中,方便后续按顺序输出ans.append(nums_sum)for num in ans:print(num)

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int q = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}int numsSum = 0;for (int num : nums) {numsSum += num;}int[] ans = new int[q];for (int k = 0; k < q; k++) {int i = scanner.nextInt() - 1;int x = scanner.nextInt();numsSum -= nums[i];numsSum += x;nums[i] = x;ans[k] = numsSum;}for (int num : ans) {System.out.println(num);}}
}

C++

#include <iostream>
using namespace std;int main() {int n, q;cin >> n >> q;int nums[n];for (int i = 0; i < n; i++) {cin >> nums[i];}int numsSum = 0;for (int i = 0; i < n; i++) {numsSum += nums[i];}int ans[q];for (int k = 0; k < q; k++) {int i, x;cin >> i >> x;i--;numsSum -= nums[i];numsSum += x;nums[i] = x;ans[k] = numsSum;}for (int i = 0; i < q; i++) {cout << ans[i] << endl;}return 0;
}

时空复杂度

时间复杂度:O(N+q)。第一次计算nums的和的时间复杂度为O(N),进行q次修改的时间复杂度为O(q)

空间复杂度:O(1)。仅需若干常数变量。

华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 OD算法冲刺训练课程表 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

这篇关于大厂真题:【模拟】OPPO2023秋招提前批-小欧数组求和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a