2023华为OD机试真题【计算数组中心位置】【Java 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华为机试真题【计算数组中心位置】

示例代码(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))


文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年8月16日
下一篇 2023年8月16日

相关推荐