如何在华为OD机试中获得满分?JavaScript实现【数组的中心位置】一文详解

您所在的位置:网站首页 js如何获取数组的长度和宽度 如何在华为OD机试中获得满分?JavaScript实现【数组的中心位置】一文详解

如何在华为OD机试中获得满分?JavaScript实现【数组的中心位置】一文详解

2023-06-19 19:37| 来源: 网络整理| 查看: 265

请添加图片描述

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: JS华为OD机试真题(2022&2023)

文章目录 1. 题目描述2. 输入描述3. 输出描述4. JavaScript算法源码5. 测试输入输出6.解题思路

1. 题目描述

给你一个整数数组nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。数组第一个元素的左侧积为1,最后一个元素的右侧积为1。如果数组有多个中心位置,应该返回最靠近左边的那一个,如果数组不存在中心位置,返回-1。

2. 输入描述

输入只有一行,给出N个正整数用空格分隔,nums = 2 5 3 6 5 6

1 let leftMulti = 1; for (let i = 0; i rightMulti *= nums[i]; } if (leftMulti === rightMulti) { list.push(middle); } if (leftFlag) { if (middle > 1) { middle--; continue; } else { leftFlag = false; rightFlag = true; middle = Math.floor(n / 2); } } if (rightFlag) { if (middle break; } } } if (list.length === 0) { return -1; } else { list.sort((a, b) => a - b); return list[0]; } } 5. 测试

在这里插入图片描述

输入

2 5 3 6 5 6

输出

3

6.解题思路

在这里插入图片描述

读取输入的整数数组nums。获取数组的长度n。初始化中间位置middle为n / 2。初始化左边乘积的标志leftFlag为true,右边乘积的标志rightFlag为false。创建一个列表list,用于存储中心位置的下标。进入一个无限循环,直到找到中心位置或完成搜索。在循环中,计算左边数的乘积和右边数的乘积,并将它们进行比较。如果左边乘积等于右边乘积,将当前中心位置加入到list中。如果左边乘积的标志leftFlag为true,将中心位置向左移动一位,如果已经到达数组的最左边,则将左边乘积的标志设为false,右边乘积的标志设为true,并将中心位置重置为n / 2。如果右边乘积的标志rightFlag为true,将中心位置向右移动一位,如果已经到达数组的最右边,则退出循环。循环结束后,检查列表list的大小。如果列表为空,表示数组不存在中心位置,输出-1。否则,将列表list排序,并输出最靠近左边的中心位置的下标。

该算法的时间复杂度为O(N),其中N是数组的长度。在最坏情况下,需要遍历整个数组来计算左边和右边的乘积。最终的空间复杂度取决于列表list的大小,即O(1)到O(N)之间。

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3