首页 > 基础资料 博客日记
2023华为OD机试真题【计算数组中心位置】【Java Python】
2023-08-27 17:49:40基础资料围观481次
这篇文章介绍了2023华为OD机试真题【计算数组中心位置】【Java Python】,分享给大家做个参考,收藏Java资料网收获更多编程知识
题目描述
给你一个整数数组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华为机试真题【计算数组中心位置】
示例代码(Java版本)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] inputs = scanner.nextLine().split(" ");
int[] numbers = new int[inputs.length];
for (int i = 0; i < inputs.length; i++) {
numbers[i] = Integer.parseInt(inputs[i]);
}
int index = findCenterIndex(numbers);
System.out.println(index);
}
public static int findCenterIndex(int[] nums) {
if (nums.length == 1) {
return 0;
}
int totalProduct = 1;
for (int num : nums) {
totalProduct *= num;
}
int leftProduct = 1;
for (int i = 0; i < nums.length; i++) {
int rightProduct = totalProduct / nums[i];
if (leftProduct == rightProduct) {
return i;
}
leftProduct *= nums[i];
totalProduct /= nums[i];
}
return -1;
}
}
示例代码(Python版本)
def find_center_index(nums):
if len(nums) == 1:
return 0
total_product = 1
for num in nums:
total_product *= num
left_product = 1
for i in range(len(nums)):
right_product = total_product // nums[i]
if left_product == right_product:
return i
left_product *= nums[i]
total_product //= nums[i]
return -1
if __name__ == "__main__":
nums = list(map(int, input().split()))
print(find_center_index(nums))
文章来源:https://blog.csdn.net/wtswts1232/article/details/130217850
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: