描述 给出两个数组,求它们的点积。(Wikipedia) 如果没有点积则返回-1 样例 Input:A = [1,1,1] B = [2,2,2] Output:6 代码 请单击下面链接在 GitHub 上查看最新的源代码: https://github.com/cwiki-us/java-tutorial/blob/master/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode1480DotProductTest.java package com.ossez.lang.tutorial.tests.lintcode; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * <p> * 1480 * <ul> * <li>@see * <a href= "https://www.cwiki.us/display/ITCLASSIFICATION/Dot+Product">https://www.cwiki.us/display/ITCLASSIFICATION/Dot+Product</a> * <li>@see<a href= "https://www.lintcode.com/problem/dot-product/">https://www.lintcode.com/problem/dot-product/</a> * </ul> * </p> * * @author YuCheng * */ public class LintCode1480DotProductTest { private final static Logger logger = LoggerFactory.getLogger(LintCode1480DotProductTest.class); /** * */ @Test public void testMain() { logger.debug("BEGIN"); int[] A = { 1, 1, -1 }; int[] B = { 2147483647, 1, 3 }; int retStatus = 0; // LENGTH CHECK if (A.length == 0 || B.length == 0 || A.length != B.length) retStatus = -1; // ADDED if (retStatus != -1) { for (int i = 0; i < A.length; i++) { retStatus = retStatus + A[i] * B[i]; } } System.out.println(retStatus); } } 点评 这个问题的关键是要了解点积是如何进行计算的。 对输入的数组还需要进行 NULL 的校验和计算。 摘录点积的计算方法如下: 向量是由n个实数组成的一个n行1列(n*1)或一个1行n列(1*n)的有序数组; 向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。 点乘公式 对于向量 a 和向量 b: a和b的点积公式为: 要求一维向量 a 和向量 b 的行列数相同。 因为要求向量 a 和 b 的行列数相同,因此在程序中需要先进行判断才可以。