华为OD机试真题B卷 Java 实现【计算数组中心位置】,附详细解题思路

news2024/11/21 0:25:52

一、题目描述

给你一个整数数组 nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相的积。

数组第一个元素的左侧积为 1,最后一个元素的右侧积为 1。如果数组有多个中心位置,应该返回最靠近左边的那一个,如果数组不存在中心位置,返回-1。

二、输入描述

2 5 3 6 5 6

三、输出描述

3

四、解题思路

  1. 读取输入的整数数组 arr;
  2. 获取数组的长度 n;
  3. 初始化一个空的列表 list,用于存储可能的中心位置;
  4. 遍历数组元素的下标 i,从 0 到 n-1;
    • 如果数组只有一个元素,即 n=1,则返回下标 0;
    • 否则,进行以下步骤:
      • 初始化变量 left 和 right 为 1,用于计算左侧和右侧的乘积;
      • 对于下标从 0 到 i-1 的元素,累乘到变量 left;
      • 对于下标从 i+1 到 n-1 的元素,累乘到变量 right;
      • 如果左侧乘积等于右侧乘积,将当前下标 i 添加到列表 list 中;
  5. 如果列表 list 的长度为 0,表示数组不存在中心位置,返回 -1;
  6. 否则,列表中的第一个下标即为最靠近左边的中心位置,返回该下标;

五、Java算法源码

/**
 * 数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相的积
 */
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String[] arr = sc.nextLine().split(" ");
    int n = arr.length;
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        if (n == 1) {
            // 如果只有1个元素,返回当前坐标
            System.out.print(0);
            return;
        } else {
            int left = 1;
            int right = 1;
            // 暴力算法
            // 计算当前元素左侧 所有元素乘积
            for (int j = 0; j < i; j++) {
                left *= Integer.parseInt(arr[j]);
            }

            // 计算当前元素右侧 所有元素乘积
            for (int k = i + 1; k < n; k++) {
                right *= Integer.parseInt(arr[k]);
            }

            // 左侧所有元素相乘的积等于右侧所有元素相的积
            if (left == right) {
                list.add(i);
            }
        }
    }

    // 数组不存在中心位置,返回-1。
    if (list.size() == 0) {
        System.out.println(-1);
        return;
    }
    
    // 如果数组有多个中心位置,应该返回最靠近左边的那一个,也就是第一个
    System.out.print(list.get(0));
}

六、效果展示

1、输入

5 6 7 3 2 5

2、输出

2

3、说明

数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相的积。

这道题属于送分了,很简单。

5 * 6 = 3 * 2 * 5 = 30,故输出2。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

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

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

相关文章

pytest:灵活替换用例中的变量

背景&#xff1a; 这几天在调试之前搭建的pytest框架时&#xff0c;发现原框架对case中的变量进行动态替换的代码不够完美&#xff0c;原代码逻辑会造成代码中会出现大量的if语句&#xff0c;让代码量增加不少&#xff0c;并且后期维护也不方便&#xff1a;case只要新增了一个…

vue3 实现全选/全不选功能

List item vue3实现全选/全不选功能 实现逻辑就是全选按钮的选中与否依赖,所有的子复选框是否选中, 通过计算属性的 get()跟set()方法绑定 全选按钮的值. <template><div class"container"><input type"checkbox" v-model"checkAll&qu…

面了个蚂蚁金服拿38K出来的,真是砂纸擦屁股,给我露了一手啊

今年的春招结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石&…

小狐狸ChatGPT付费创作系统1.9.7独立版 + H5端 + 小程序前端增加AI绘画+GPT4接口

小狐狸ChatGPT 1.9.7独立版经播播资源测试了版本比较&#xff0c;本版核心增加了GPT4.0接口功能&#xff0c;小程序端内置了AI绘画功能。体验下来问答速度感觉体验更好。小程序端有更新请对应开发工具更新上传&#xff0c;本版无开源端。播播资源提供的安装教程详见下方&#x…

网路安全技能竞赛——【Linux操作系统渗透提权】解析(超级详细)

Linux操作系统渗透提权 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2202&#xff08;关闭链接&#xff09;用户名&#xff1a;hacker 密码&#xff1a;123456 使用渗透机对服务器信息收集&#xff0c;并将服务器中SSH服务端口号作为flag提交&#xff1b;…

【Redis】聊一下Redis的哨兵机制

在上一篇文章中&#xff0c;我们学习了数据库的Redis的主从集群复制模式&#xff0c;如果从库出现问题&#xff0c;那么其他主从库还可以处理读写请求&#xff0c;但是如果主库宕机&#xff0c;写请求从库处理不了&#xff0c;整个系统就不可用了&#xff0c;虽然只处理只读请求…

Windows提权:利用MSSQL数据库,Oracle数据库

目录 MSSQL提权&#xff1a;使用xp_cmdshell进行提权 MSSQL&#xff1a;使用sp_OACreate进行提权 MSSQL&#xff1a;使用沙盒提权 Oracle提权&#xff1a;工具一把梭哈 总结 MSSQL在Windows server类的操作系统上&#xff0c;默认具有system权限。 MSSQL提权&#xff1a;使…

三、浅谈机器人的底盘设计

两电机差速底盘 方式1&#xff1a;驱动轮在后&#xff0c;万向轮在前&#xff08;支撑轮也可以换成全向轮&#xff0c;目的只是撑地&#xff09;&#xff0c;在一般的巡线比赛中较常用。 该底盘的优点&#xff1a;运动灵活&#xff0c;组装简单 该底盘的缺点&#xff1a;车体…

如何增加音频音量,给大家分享两个免费方法!

相信许多音频剪辑新手在刚开始的阶段需要探索学习各种操作方法。其中&#xff0c;许多用户发现自己的音频文件音量太小&#xff0c;想要增加音量&#xff0c;但却不知道使用哪种工具更好&#xff0c;如何操作更为方便。为此&#xff0c;我为您整理了两种方法&#xff0c;并向新…

docker的基本相关知识和操作

镜像相关操作命令&#xff1a; 访问DockerHub搜索镜像&#xff0c;https://hub.docker.com/ 查看本地镜像&#xff1a;docker images 搜索镜像 docker search redis &#xff08;搜索redis&#xff09; 拉取镜像&#xff1a;docker pull redis &#xff08;默认版本&#x…

Slow-Fast使用教程2023.5.30

项目地址 https://github.com/facebookresearch/SlowFast 安装教程 首先参考官方安装必须的包并下载项目文件&#xff1a;https://github.com/facebookresearch/SlowFast/blob/main/INSTALL.md 安装注意&#xff1a; 最好使用Linux系统&#xff0c;如果是windows系统&#xf…

3. JVM对象创建与内存分配机制深度剖析

JVM性能调优 1. 对象的创建1.1 类加载检查1.2 分配内存1.3 初始化1.4 设置对象头1.HotSpot虚拟机的对象头包括三部分信息&#xff1a;Mark Word、Klass Pointer类型指针、数组长度 1.5 执行<init>方法 2. 对象大小与指针压缩2.1 什么是java对象的指针压缩&#xff1f;2.2…

数据结构——链式二叉树

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

【云原生|探索 Kubernetes 系列 7】探究 Pod 有什么用,为什么需要它

前言 大家好&#xff0c;我是秋意零。 前一篇&#xff0c;我们介绍了如何从 0 到 1 搭建 Kubernetes 集群。现在我们可以正式了解&#xff0c;Kubernetes 核心特征了。 今天我们来探究 Pod&#xff0c;为什么需要 Pod&#xff1f; &#x1f47f; 简介 &#x1f3e0; 个人主页…

编程示例:求排列的逆,反序表,以及从反序表计算排列

编程示例&#xff1a;求排列的逆&#xff0c;反序表&#xff0c;以及从反序表计算排列 计算机程序设计艺术的第三卷 第五章排序中&#xff0c;第5.1.1节中 提到了排列的反序&#xff0c;反序表&#xff0c;逆的概念。 首先&#xff0c;简单地介绍一下这两个概念。例如一个排列…

RK3566 ALC5616录音调试

1.硬件原理图 MIC_P&#xff0c;MIC_N&#xff1a;mic输入。 I2S&#xff1a;总共有5根线&#xff08;这里不是指 i2s 标准接口&#xff09;&#xff1a;两根音频数据线&#xff08;输入/输出&#xff09;、三根时钟线 其中&#xff1a; I2S_LRCK 是指示当前数据线传输的是左声…

【网络】UDP的应用场景

文章目录 翻译功能命令行解析网络聊天室UDP之Windows与Linux 翻译功能 我们写的UDP服务端并不是只接收到数据就完了&#xff0c;还需要进行处理任务。 我们可以在服务端udpServer.hpp中设置一个回调函数 _callback&#xff0c;具体的逻辑通过udpServer.cc中由外部进行传入 代…

Windows系统安全基线

文章目录 前言一、安全基线概述1.操作系统安全基线 二、系统账户安全1.控制密码安全2.密码策略3.账户锁定策略例&#xff1a;密码策略应用例&#xff1a;账户锁定策略应用 三、本地策略1.审核策略2.用户权限分配3.安全选项配置例&#xff1a;审核策略应用例&#xff1a;用户权限…

软件测试理论----软件测试六大测试类型

1、功能测试&#xff1a;关注功能是否正确 常见的关注点 1&#xff09;是否有不正确或者遗漏的功能 2&#xff09;是否满足用户的需求和系统隐藏的需求 3&#xff09;输入能否正确接收&#xff0c;能否输出正确结果 2、可用性测试&#xff1a;关注产品是否好用 常见的关注点…

03灰度变换与空间滤波

文章目录 3灰度变换与空间滤波3.1背景知识3.1.1灰度变换和空间滤波基础 3.2一些基本的灰度变换函数3.2.1图像反转3.2.2对数变换3.2.3幂律&#xff08;伽马&#xff09;变换3.2.4分段线性变换函数 3.3直方图处理3.3.1直方图均衡3.3.2直方图匹配&#xff08;规定化&#xff09;3.…