题目链接

向量点乘

题目描述

这是一个函数实现题。你需要实现一个 dotTime (英文名直译为"点时间",但实际应为点积 dot product) 函数,该函数接收两个三维向量作为参数。

你的任务是计算这两个向量的点乘结果,并将其作为函数的返回值。

输入:

  • vector1: 一个包含三个整数的数组/列表,表示第一个向量 (e.g., [x1, y1, z1])。
  • vector2: 一个包含三个整数的数组/列表,表示第二个向量 (e.g., [x2, y2, z2])。

示例:

  • 输入: [1, 1, 4], [5, 1, 4]
  • 你的函数应返回: 22
  • 说明: 1*5 + 1*1 + 4*4 = 5 + 1 + 16 = 22

解题思路

本题旨在考察对向量点积(或称内积、数量积)基本定义的理解和实现。对于两个三维向量 ,它们的点积定义为: [ \vec{a} \cdot \vec{b} = x_1x_2 + y_1y_2 + z_1z_2 ] 这是一个将两个向量映射到一个标量(即一个单独的数)的操作。

实现步骤非常简单:

  1. 从输入的两个数组/向量中,分别取出对应位置的元素。
  2. 将对应位置的元素相乘。
  3. 将所有乘积相加。
  4. 返回最终的和。

例如,对于输入 vector1vector2

  • 计算 vector1[0] * vector2[0]
  • 计算 vector1[1] * vector2[1]
  • 计算 vector1[2] * vector2[2]
  • 将这三个结果相加即可。

由于向量维度固定为 3,所以这是一个固定次数的计算,无需循环。

数据范围考虑: 题目备注中提到坐标绝对值小于 1000。

  • 单个乘积的最大值约为 1000 * 1000 = 1,000,000
  • 总和的最大值约为 3 * 1,000,000 = 3,000,000。 这个结果在标准的 32 位整型 (int) 范围内,因此不需要使用 long long

代码

注意:以下是你需要提交的全部内容,即在牛客网给定的模板中填写的代码。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个三维向量的点乘结果
     * @param vector1 int整型vector 第一个向量
     * @param vector2 int整型vector 第二个向量
     * @return int整型
     */
    int dotTime(std::vector<int>& vector1, std::vector<int>& vector2) {
        return vector1[0] * vector2[0] + vector1[1] * vector2[1] + vector1[2] * vector2[2];
    }
};
import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个三维向量的点乘结果
     * @param vector1 int整型一维数组 第一个向量
     * @param vector2 int整型一维数组 第二个向量
     * @return int整型
     */
    public int dotTime(int[] vector1, int[] vector2) {
        int result = 0;
        for (int i = 0; i < 3; i++) {
            result += vector1[i] * vector2[i];
        }
        return result;
    }
}
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算两个三维向量的点乘结果
# @param vector1 int整型一维数组 第一个向量
# @param vector2 int整型一维数组 第二个向量
# @return int整型
#
class Solution:
    def dotTime(self, vector1, vector2):
        # 使用zip将两个列表打包,然后用生成器表达式计算和
        return sum(a * b for a, b in zip(vector1, vector2))

算法及复杂度

  • 算法: 基本算术运算。
  • 时间复杂度: 。因为向量的维度是固定的 3,所以计算点积所需的操作(3 次乘法和 2 次加法)是常数级别的。
  • 空间复杂度: 。没有使用与输入大小相关的额外存储空间。