题目描述
给你一个整数数组nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。数组第一个元素的左侧积为1,最后一个元素的右侧积为1。
如果数组有多个中心位置,应该返回最靠近左边的那一个,如果数组不存在中心位置,返回-1。
输入描述
输入只有一行,给出N个正整数用空格分隔:nums = 2 5 3 6 5 6
1 <= nums.length <= 1024
1 <= nums[i] <= 10
输出描述
输出:3
解释:中心位置是3
用例
输入 | 2 5 3 6 5 6 |
输出 | 3 |
说明 | 无 |
题目解析
问题描述
给定一个整数数组 nums
,需要找到数组的中心位置。数组的中心位置是一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。数组第一个元素的左侧积为1,最后一个元素的右侧积为1。如果数组有多个中心位置,返回最靠近左边的那个。如果不存在中心位置,返回-1。
输入描述
输入只有一行,包含N个正整数用空格分隔。
- 1 <= nums.length <= 1024
- 1 <= nums[i] <= 10
输出描述
输出一个整数,表示数组的中心位置。如果不存在,返回-1。
示例
输入:
2 5 3 6 5 6
输出:
3
解释:中心位置是3
解题思路
- 计算总积:先计算整个数组的乘积。
- 遍历数组:从左到右遍历数组,维护当前元素的左侧乘积和右侧乘积。
- 判断中心位置:如果某个位置的左侧乘积等于右侧乘积,则该位置为中心位置。
- 返回结果:输出第一个满足条件的位置,如果没有则返回-1。
C++代码实现
#include <iostream>
#include <vector>
using namespace std;
int findCenterIndex(vector<int>& nums) {
int totalProduct = 1;
for (int num : nums) {
totalProduct *= num;
}
int leftProduct = 1;
for (int i = 0; i < nums.size(); ++i) {
int rightProduct = totalProduct / (leftProduct * nums[i]);
if (leftProduct == rightProduct) {
return i;
}
leftProduct *= nums[i];
}
return -1;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int centerIndex = findCenterIndex(nums);
cout << centerIndex << endl;
return 0;
}
代码说明
- 计算总积:遍历数组,计算所有元素的乘积。
- 遍历数组:从左到右遍历数组,计算当前元素的左侧乘积和右侧乘积。
- 判断中心位置:如果左侧乘积等于右侧乘积,返回当前位置。
- 返回结果:输出找到的中心位置,如果没有则返回-1。
这个程序能够找到数组的中心位置,并输出结果。
python代码实现
def find_center_index(nums):
total_product = 1
for num in nums:
total_product *= num
left_product = 1
for i in range(len(nums)):
right_product = total_product // (left_product * nums[i])
if left_product == right_product:
return i
left_product *= nums[i]
return -1
# 读取输入
nums = list(map(int, input().split()))
# 计算并输出中心位置
print(find_center_index(nums))
代码说明
- find_center_index函数:计算整个数组的总积,然后遍历数组,计算当前元素的左侧乘积和右侧乘积,并判断是否满足中心位置的条件。
- 读取输入:通过
input().split()
读取一行输入,并转换为整数列表。 - 计算并输出中心位置:调用
find_center_index
函数计算中心位置,并输出结果。
这个Python程序可以计算数组的中心位置,并输出结果。你可以在Python环境中运行这个程序来实现该功能。