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

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

  1. 将数组中所有值为奇数的元素加上x
  2. 将数组中所有值为偶数的元素加上x
    请你输出m次操作后的数组

输入描述
第一行两个整数n和m,表示数组长度和操作次数
第二行n个整数,表示数组a的初始值。
接下来m行,每行两个整数t和x,t表示一次操作的类型和参数,t为1表示第一种操作,t为2表示第二种操作
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,相加完毕后所有元素都变成奇数

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

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

设置两个变量oddx和evenx,分别表示初始数组中的奇数和偶数,在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 = False

for _ in range(m):
t, x = map(int, input().split())
# x为奇数的情况
if x % 2 == 1:
# 若此时数组中同时存在偶数和奇数
if isAllEven == False and isAllOdd == False:
# 若是操作1,数组中所有奇数加上x
if t == 1:
oddx += x
# 数组中所有的元素都变成偶数
isAllEven = True
# 若是操作2,数组中所有偶数加上x
elif 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
#include

using namespace std;

int main() {
int n, m;
cin >> n >> m;
vector 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/133525.shtml

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

相关文章

初识JVM

1. JVM内存区域划分 jvm在启动的时候&#xff0c;会申请到一整个很大的内存区域。整个一大块区域&#xff0c;不太好用。为了更方便使用&#xff0c;把整个区域隔成了很多区域&#xff0c;每个区域都有不同的作用。 本地方法栈 此处提到的栈和数据结构中的栈不是一个东西&…

如何在Linux机器上使用ssh远程连接Windows Server服务器

如何在Linux机器上使用ssh远程连接Windows Server服务器 一、源起二、使用ssh远程连接Windows1.先决条件&#xff08;1&#xff09;至少运行 Windows Server 2019 或 Windows 10&#xff08;内部版本 1809&#xff09;的设备。&#xff08;2&#xff09;PowerShell 5.1 或更高版…

【广州华锐互动】影视制作VR在线学习:身临其境,提高学习效率

随着科技的不断发展&#xff0c;影视后期制作技术也在日新月异。然而&#xff0c;传统的教学方式往往难以满足学员的学习需求&#xff0c;无法充分展现影视后期制作的魅力和潜力。近年来&#xff0c;虚拟现实(VR)技术的崛起为教学领域带来了新的机遇。通过VR教学课件&#xff0…

超详细Linux搭建Hadoop集群

一、给计算机集群起别名——互通 总纲&#xff1a; 1、准备3台客户机&#xff08;关闭防火墙、静态IP、主机名称都设置好&#xff09; 2、安装JDK&#xff08;可点击&#xff09; 3、配置环境变量 4、安装Hadoop 5、配置hadoop的环境变量 6、配置集群 7、群起测试 1.1、环境准备…

蓝鹏测控平台软件 智能制造生产线的大脑

测控软件平台&#xff0c;是由包括底层驱动程序、通讯协议等&#xff0c;集数据采集、自动反馈控制、信息分析以及多种工程应用于一体的一种电子信息处理平台。 蓝鹏测控软件平台目前支持各种文本标签 、数字标签&#xff1b;支持趋势图、波动图、缺陷图及统计图表。多端口实现…

MCU常见通信总线串讲(一)—— UART和USART

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言一…

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图&#xff0c;错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…

Lyapunov function 李雅普诺夫函数

文章目录 正文定义对定义中出现的术语的进一步讨论 Basic Lyapunov theorems for autonomous systems 自治系统的基本李雅普诺夫定理Locally asymptotically stable equilibrium 局部渐近稳定平衡Stable equilibrium 稳定平衡Globally asymptotically stable equilibrium 全局渐…

计算机毕业设计java+vue+springboot的论坛信息网站

项目介绍 本论文系统地描绘了整个网上论坛管理系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、公告管理、公告类型管理、热门帖子管理、帖子分类管理、留言板管理、论坛新天地、我的收藏管理、系统管理&#…

react typescript @别名的使用

1、config/webpack.config.js中找到alias&#xff0c;添加"": path.resolve(__dirname,../src)&#xff0c;如下&#xff1a; alias: {// Support React Native Web// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-w…

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种&#xff0c;无论在C语言或者Java中都很常见&#xff0c;后续在数据…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观&#xff0c;平面的东西。程序开发也好理解就是功能实现。而前端开发&#xff0c;简单来说&#xff0c;就是把平面效果图转换成网页&#xff0c;把静态转换成动态。它的工作包括了:切图、写样式、做鼠…

DSP_TMS320F28335_队列与栈

说起队列和栈&#xff0c;链表动态内存分配的方式&#xff0c;是比较常见的方式&#xff0c;最近项目下需要在dsp上面使用队列和栈两种数据结构&#xff0c;所有就使用链表动态内存分配的方式实现了一下&#xff0c;但是调试的过程中发现运行的时候总是在动态内存分配的位置出b…

IDEA取消git对项目的版本控制

前言 前几天新建项目的时候不小心选了个git仓库&#xff0c;导致这个测试项目一直被git管理着。 解决办法 1 右键项目 选择打开资源目录 2 删除.git文件 把目录下的.git文件删掉 3 删除idea中的git管理 删除完.git文件后&#xff0c;进入idea&#xff0c;右下角会有这样的提…

广域网加速的作用:企业为什么需要广域网加速?

由于局域网与广域网之间巨大的带宽鸿沟&#xff0c;通过增加带宽来满足膨胀的流量需求是不切实际的。 并且广域网带宽成本较高&#xff0c;增加广域网带宽对任何企业都意味着巨大的成本负担。这些使得控制 管理广域网带宽使用成为必需。 企业为什么要加速广域网? 对重要的企…

轻量封装WebGPU渲染系统示例<12>- 基础3D对象实体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/PrimitiveEntityTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见&#xff1a;引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔…

vue3-video-play视频播放组件

安装&#xff1a; npm i vue3-video-play --save使用说明&#xff1a; https://codelife.cc/vue3-video-play/guide/install.html

2023年05月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 请选择&#xff0c;下面代码运行之后的结果是&#xff1f;&#xff08; &#xff09; a 2 b 4 try:c a * bprint(c…

数据结构:AVL树的实现和全部图解

文章目录 为什么要有AVL树什么是AVL树AVL树的实现元素的插入平衡因子的更新AVL树的旋转 AVL树的检查完整实现 本篇总结的是AVL树中的全部内容&#xff0c;配有详细的图解过程 为什么要有AVL树 前面对map/multimap/set/multiset进行了简单的介绍&#xff0c;在其文档介绍中发现…

白盒测试用例的设计(图文讲解,超详细)

正文 语句覆盖&#xff1a;每条语句至少执行一次。判定覆盖&#xff1a;每个判定的所有可能结果至少出现一次。&#xff08;又称“分支覆盖”&#xff09;条件覆盖&#xff1a;每个条件的所有可能结果至少执行一次。判定/条件覆盖&#xff1a;一个判定中的每个条件的所有可能结…