2024华为OD机试真题【计算数组中心位置】【 Python】
后台-插件-广告管理-内容页头部广告(手机) |
题目描述
给你一个整数数组nums,请计算数组的中心位置。数组的中心位置是数组的一个下标, 其左侧所有元素相乘的积等于右侧所有元素相乘的积。数组第一个元素的左侧积为1,最后一个元素的右侧积为1。 如果数组有多个中心位置,应该返回最靠近左边的那一个,如果数组不存在中心位置,返回-1。
输入
2 5 3 6 5 6
输出
3
题意解读
左侧积:该元素左侧所有元素的乘积;
右侧积:该元素右侧所有元素的乘积;
例如元素3,他的左侧积是 2*5 = 10. 他的右侧积是6*5*6 = 180
数组的中心位置指的是:该元素的 左侧积 等于 右侧积
解题思路
遍历整个数组,在遍历的过程中,计算当前元素左侧所有元素的乘积(leftProduct )和右侧所有元素乘积(rightProduct ),当leftProduct == rightProduct,表示找到了中心位置。
那么,如何初始化左侧积leftProduct 和右侧积 rightProduct 呢?leftProduct 初始值为 1,rightProduct初始值是所有元素相乘。
初始化完成后,开始遍历数组,从左到右的顺序遍历 。对于当前位置 i,首先更新左侧积(如果 i 不是第一个元素,那么左侧积为 leftProduct * nums[i-1]),然后更新右侧积(rightProduct / nums[i])。
如果左侧积和右侧积相等,则表示i就是中心点。
视频讲解
2023华为机试真题【计算数组中心位置】
示例代码(Python版本)
def find_center_index(nums): if len(nums) == 1: return 0 n = len(nums) left_product = [1] * n right_product = [1] * n for i in range(1, n): left_product[i] = left_product[i - 1] * nums[i - 1] for i in range(n - 2, -1, -1): right_product[i] = right_product[i + 1] * nums[i + 1] for i in range(n): if left_product[i] == right_product[i]: return i return -1 nums = [int(x) for x in input().split()] index = find_center_index(nums) print(index)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |