大厂秋招真题【模拟】阿里蚂蚁20231010秋招T2-奇偶操作

题目描述与示例

题目描述

小红有一个长度为n的数组a,她将对数组进行m次操作,每次操作有两种类型:

  1. 将数组中所有值为奇数的元素加上x
  2. 将数组中所有值为偶数的元素加上x

请你输出m次操作后的数组

输入描述

第一行两个整数nm,表示数组长度和操作次数

第二行n个整数,表示数组a的初始值。

接下来m行,每行两个整数txt表示一次操作的类型和参数,t1表示第一种操作,t2表示第二种操作

1 < n, m < 10^5
1 < ai, x < 10^5
1 <= t <= 2

输出描述

输出一行,包含n个整数,表示m次操作后的数组

示例

输入

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

输出

6 4 8 6 10

说明

第一次,将所有奇数元素加 2,数组变为[3,2,5,4,7]

第二次,将所有偶数元素加 2,数组变为[3,4,5,6,7]

第三次,将所有奇数元素加 3,数组变为[6,4,8,6,10]

时空限制

时间限制: C/C++ 1000MS,其他语言 2000MS

内存****限制: C/C++ 256M,其他语言 512M

解题思路

注意到一个非常重要的数学性质,对于任意两个正整数相加

奇数 + 奇数 = 偶数
偶数 + 偶数 = 偶数
奇数 + 偶数 = 奇数
偶数 + 奇数 = 奇数

假设一开始数组中既存在奇数,也存在偶数。在遇到第一个为奇数的x时,若

  • t = 1,则数组中所有的奇数都要加上x,相加完毕后所有元素都变成偶数
  • t = 2,则数组中所有的偶数都要加上x,相加完毕后所有元素都变成奇数

我们分别用isAllOddisAllEven两个变量来表示数组的状态。当

  • isAllOddisAllEven均为False时,说明此时数组中既存在奇数,也存在偶数。
  • isAllOdd = True,此时数组中的元素均为奇数
  • isAllEven = True,此时数组中的元素均为偶数
  • 注意:不可能出现isAllOddisAllEven均为True的情况。

设置两个变量oddxevenx,分别表示初始数组中的奇数和偶数,在m次操作中的增量。那么在遍历过程中,所有元素的变化可以依照下表进行

x是奇数x是偶数
t=1数组所有奇数加x数组中有奇数有偶数isAllEven == False and isAllOdd == Falseoddx += x所有的奇数变为偶数isAllEven = Trueoddx += x数组的奇偶性不变
数组中只有奇数isAllOdd == Trueoddx += x``evenx += x数组的奇偶性反过来isAllEven = not isAllEven``isAllOdd = not isAllOddoddx += x``evenx += x数组的奇偶性不变
数组中只有偶数isAllEven == True不做任何处理
t=2数组所有偶数加x数组中有奇数有偶数isAllEven == False and isAllOdd == Falseevenx += x所有的偶数变为奇数isAllOdd = Trueevenx += x数组的奇偶性不变
数组中只有偶数isAllEven == Trueoddx += x``evenx += x数组的奇偶性反过来isAllEven = not isAllEven``isAllOdd = not isAllOddoddx += x``evenx += x数组的奇偶性不变
数组中只有奇数isAllOdd == True不做任何处理

代码

Python

n, m = map(int, input().split())
a = list(map(int, input().split()))oddx = 0
evenx = 0
isAllOdd = False
isAllEven = Falsefor _ in range(m):t, x = map(int, input().split())# x为奇数的情况if x % 2 == 1:# 若此时数组中同时存在偶数和奇数if isAllEven == False and isAllOdd == False:# 若是操作1,数组中所有奇数加上xif t == 1:oddx += x# 数组中所有的元素都变成偶数isAllEven = True# 若是操作2,数组中所有偶数加上xelif t == 2:evenx += x# 数组中所有的元素都变成奇数isAllOdd = True# 已经是全偶数或全奇数的情况,变号elif (isAllEven and t == 2) or (isAllOdd and t == 1):oddx += xevenx += xisAllEven = not isAllEvenisAllOdd = not isAllOdd# x为偶数的情况else:# 若此时数组中同时存在偶数和奇数if isAllEven == False and isAllOdd == False:# 若是操作1,数组中所有奇数加上xif t == 1:oddx += x# 若是操作2,数组中所有偶数加上xelse:evenx += x# 已经是全偶数或全奇数的情况,不变号elif (isAllEven and t == 2) or (isAllOdd and t == 1):oddx += xevenx += x# 遍历原数组,所有奇数加上oddx,所有偶数加上evenx
ans = [a[i] + oddx if a[i] % 2 == 1 else a[i] + evenx for i in range(n)]
print(" ".join(map(str, ans)))

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();}int oddx = 0;int evenx = 0;boolean isAllOdd = false;boolean isAllEven = false;for (int i = 0; i < m; i++) {int t = sc.nextInt();int x = sc.nextInt();if (x % 2 == 1) {if (!isAllEven && !isAllOdd) {if (t == 1) {oddx += x;isAllEven = true;} else if (t == 2) {evenx += x;isAllOdd = true;}} else if ((isAllEven && t == 2) || (isAllOdd && t == 1)) {oddx += x;evenx += x;isAllEven = !isAllEven;isAllOdd = !isAllOdd;}} else {if (!isAllEven && !isAllOdd) {if (t == 1) {oddx += x;} else {evenx += x;}} else if ((isAllEven && t == 2) || (isAllOdd && t == 1)) {oddx += x;evenx += x;}}}int[] ans = new int[n];for (int i = 0; i < n; i++) {if (a[i] % 2 == 1) {ans[i] = a[i] + oddx;} else {ans[i] = a[i] + evenx;}}for (int i = 0; i < n; i++) {if (i < n - 1) {System.out.print(ans[i] + " ");} else {System.out.println(ans[i]);}}}
}

C++

#include <iostream>
#include <vector>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}int oddx = 0;int evenx = 0;bool isAllOdd = false;bool isAllEven = false;for (int i = 0; i < m; i++) {int t, x;cin >> t >> x;if (x % 2 == 1) {if (!isAllEven && !isAllOdd) {if (t == 1) {oddx += x;isAllEven = true;} else if (t == 2) {evenx += x;isAllOdd = true;}} else if ((isAllEven && t == 2) || (isAllOdd && t == 1)) {oddx += x;evenx += x;isAllEven = !isAllEven;isAllOdd = !isAllOdd;}} else {if (!isAllEven && !isAllOdd) {if (t == 1) {oddx += x;} else {evenx += x;}} else if ((isAllEven && t == 2) || (isAllOdd && t == 1)) {oddx += x;evenx += x;}}}vector<int> ans(n);for (int i = 0; i < n; i++) {if (a[i] % 2 == 1) {ans[i] = a[i] + oddx;} else {ans[i] = a[i] + evenx;}}for (int i = 0; i < n; i++) {if (i < n - 1) {cout << ans[i] << " ";} else {cout << ans[i] << endl;}}return 0;
}

时空复杂度

时间复杂度:O(m+n)。一共有m次操作,最后修改数组需要遍历n个元素。

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

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

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

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

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

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

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

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

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

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

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

相关文章

Android平台上执行C/C++可执行程序,linux系统编程开发,NDK开发前奏。

Android平台上执行C/C可执行程序&#xff0c;linux系统编程开发&#xff0c;NDK开发前奏准备。 1.下载NDK&#xff0c;搭建NDK开发环境 下载地址 https://developer.android.com/ndk/downloads 下载过程中点击下面箭头的地方&#xff0c;点击鼠标右键&#xff0c;复制好下载…

MyBatis与SQL实用技巧 实用语法

数据库SQL技巧 数值转字符 <select id"getMaterialsList" resultType"java.util.Map">selectmaterial_id materialId,material_name materialName,unit, specification, CONVERT(unit_price,CHAR) unitPricefrom trace_agriculture_materialwhere …

2. Spark报错,Task is Failed,errorMsg: FileNotFoundException xxxx

完整报错信息 21304, Task is Failed,errorMsg: FileNotFoundException: File does not exist: hdfs://xxxx-bigdata-nameservice/user/hive/warehouse/edw_ic.db/xxxx/part-00000-c8a718b3-54b3-42de-b36c-d6eedefd2e02-c000.snappy.parquet It is possible the xxx报错场景 …

【React-Native开发3D应用】React Native加载GLB格式3D模型并打包至Android手机端

【React-Native开发3D应用】React Native加载GLB格式3D模型并打包至Android手机端 【加载3D模型】**React Native上如何加载glb格式的模型**第零步&#xff0c;选择相关模型第一步&#xff0c;导入相关模型加载库第二步&#xff0c;自定义GLB模型加载钩子第三步&#xff0c;借助…

this是指向的哪个全局变量,改变this指向的方法有几种?

在JavaScript中&#xff0c;this关键字指向当前执行上下文中的对象。它的具体指向取决于函数的调用方式。 改变this指向的方法有四种&#xff1a; 1.使用call()方法&#xff1a;call()方法在调用函数时将指定的对象作为参数传递进去&#xff0c;从而改变函数的this指向。用法示…

现一个智能的SQL编辑器

补给资料 管注公众号&#xff1a;码农补给站 前言 目前我司的多个产品中都支持在线编辑 SQL 来生成对应的任务。为了优化用户体验&#xff0c;在使用 MonacoEditor 为编辑器的基础上&#xff0c;我们还支持了如下几个重要功能&#xff1a; 多种 SQL 的语法高亮多种 S…

React路由与导航

目录 前言&#xff1a; 什么是React路由&#xff1f; 导航和页面切换 路由参数和动态路由 路由守卫和权限控制 总结 前言&#xff1a; React是一个流行的JavaScript库&#xff0c;用于构建用户界面。在使用React开发Web应用程序时&#xff0c;路由和导航是必不可少的功能…

C语言初学1:详解#include <stdio.h>

一、概念 #include <stdio.h> 称为编译预处理命令&#xff0c;它在告诉C编译器在编译时包含stdio.h文件&#xff0c;如果在代码中&#xff0c;调用了这个头文件中的函数或者宏定义&#xff0c;则需引用该头文件。 二、作用 stdio.h是c语言中的标准输入输出的头文件&am…

【MATLAB源码-第69期】基于matlab的LDPC码,turbo码,卷积码误码率对比,码率均为1/3,BPSK调制。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 本文章介绍了卷积码、Turbo码和LDPC码。以相同的码率仿真这三种编码&#xff0c;并对比其误码率性能 信源输出的数据符号&#xff08;二进制&#xff09;是相互独立和等概率的&#xff1b; 信道是加性白高斯噪声信道&#…

qframework 架构 (作者:凉鞋)使用笔记

一些准则&#xff1a; 根据VIEW->SYSTEM->MODEL的分层架构 初始架构&#xff1a; app. using FrameworkDesign;namespace ShootingEditor2D&#xff08;项目的命名空间&#xff09; {public class ShootingEditor2D &#xff08;游戏名称&#xff09;: Architecture&l…

Android Studio——android项目运行main()函数

报错&#xff1a; 解决&#xff1a; 如图&#xff0c;在 .idea 的 gradle.xml 中标注的位置增加如下一行代码即可<option name"delegatedBuild" value"false" />

LinuxMySql

结构化查询语言 DDL&#xff08;数据定义语言&#xff09; 删除数据库drop database DbName; 创建数据库create database DbName; 使用数据库use DbName; 查看创建数据库语句以及字符编码show create database 43th; 修改数据库属性&#xff08;字符编码改为gbk&#xff09;…

HarmonyOS应用开发-常用组件与布局

基础组件 Text 功能&#xff1a;用于显示文本内容。属性&#xff1a;可以设置文本颜色、字体大小、字体样式、字体粗细和字体族。 参数名称参数类型描述fontColorResourceColor设置文本颜色。fontSizeLength | Resource设置文本尺寸&#xff0c;Length为number类型时&#x…

CSS3实现动态旋转加载样式

要使用 CSS3 创建一个动态旋转加载样式&#xff0c;可以使用 CSS 动画和旋转变换。下面是一个简单的示例&#xff1a; HTML&#xff1a; <div class"loader"></div> CSS&#xff1a; .loader {width: 50px;height: 50px;border: 4px solid #3498db;b…

HR人才测评,采用线上测评做春招秋招

从人力资源管理的工作&#xff0c;已经有好些年了&#xff0c;我只想说这不是一个有创意和创造性的工作&#xff0c;因为大部分时间我都在从事数据方面的工作。关于公司内部的文案工作先且不说&#xff0c;这里分享下我做招聘工作的过程。 每年春秋两季的校招&#xff0c;算是…

基于单片机的多层电梯控制仿真系统

**单片机设计介绍&#xff0c; 基于单片机的多层电梯控制仿真系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的多层电梯控制仿真系统是一个复杂的系统&#xff0c;它需要结合单片机技术、控制理论、电子技术以及人…

RabbitMQ 系列教程

一、RabbitMQ 部署及配置详解(集群部署) 二、RabbitMQ 部署及配置详解 (单机) 三、RabbitMQ 详解及实例&#xff08;含错误信息处理&#xff09; 四、RabbitMq死信队列及其处理方案 五、RabbitMQ Java开发教程—官方原版 六、RabbitMQ Java开发教程&#xff08;二&#x…

虚拟机复制后,无法ping通问题解决

虚拟机复制后&#xff0c;无法ping通问题解决 可能出现的现象 ssh工具连接不上虚拟机&#xff1b;虚拟机ping不通外网或者ping不通内网其它虚拟机&#xff1b; 原因 原虚拟机和新复制出来的虚拟机的ip地址重复&#xff1b;原虚拟机和新复制出来的虚拟机的MAC地址重复&#…

Spring Boot中使用Spring Data JPA访问MySQL

Spring Data JPA是Spring框架提供的用于简化JPA&#xff08;Java Persistence API&#xff09;开发的数据访问层框架。它通过提供一组便捷的API和工具&#xff0c;简化了对JPA数据访问的操作&#xff0c;同时也提供了一些额外的功能&#xff0c;比如动态查询、分页、排序等。 …