算法数组与矩阵模块不包含本位置的累乘数组值(含不用除法的方法)
Posted 元空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法数组与矩阵模块不包含本位置的累乘数组值(含不用除法的方法)相关的知识,希望对你有一定的参考价值。
目录
前言
当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~
在此感谢左大神让我对算法有了新的感悟认识!
问题介绍
原问题
给定一个无序数组arr,循环遍历arr,求不包含arr[i],剩下的数之间的累乘结果
如:arr = [1,2,3]
结果为:[6,3,2]
解决方案
原问题:
方法一(除法):
1、遍历arr,求arr的累乘值,过程中计算0的个数和0第一次出现的index,0不参与累乘
2、判断0的个数,如果0的个数大于1,则直接返回0即可
3、如果0的个数为1,则除了0位置以外为累乘结果,其他位置全部为0
4、如果数组中不存在0,则遍历arr,记录累乘积除以arr[i]的值即可
方法二(不使用除法):
1、申请两个数组,l数组合r数组,l[i]代表除了arr[0…i-1]的累乘积,r[i]代表arr[i+1…arr.len]的累乘积
2、直接遍历arr数组,遍历到arr[i]时,res[i] = l[i] * r[i] ,注意边界即可
代码编写
java语言版本
原问题:
方法一:
/**
* 二轮测试:可以使用除法的方法
* @param arr
* @return
*/
public static int[] getMultiCp1(int[] arr)
if (arr == null || arr.length == 0)
return null;
// 记录0的个数
int count0 = 0;
// 记录如果只有一个零时,零的位置
int index0 = 0;
// 累乘之和
int all = 1;
int[] res = new int[arr.length];
for (int i = 0; i < arr.length; i++)
if (arr[i] == 0)
count0++;
index0 = i;
else
all *= arr[i];
if (count0 == 1)
res[index0] = all;
else if (count0 == 0)
// 没有零
for (int i = 0; i < arr.length; i++)
res[i] = all/arr[i];
return res;
方法二:
/**
* 二轮测试:不使用除法的方法
* @param arr
* @return
*/
public static int[] getMultiCp2(int[] arr)
if (arr == null || arr.length == 0)
return null;
int len = arr.length;
// 记录到arr[i]时的累乘
int[] r = new int[len];
// l[i]代表从arr[i...len-1]的累乘
int[] l = new int[len];
r[0] = arr[0];
l[len-1] = arr[len-1];
// 填充r和l
for (int i = 1; i < len; i++)
r[i] = r[i-1] * arr[i];
l[len-i-1] = l[len-i] * arr[len-i-1];
// 计算结果
int[] res = new int[len];
// 两个边界值先写好
res[0] = arr[0];
res[len-1] = arr[len-1];
for (int i = 1; i < res.length-1; i++)
res[i] = r[i-1] * l[i+1];
return res;
public static void main(String[] args)
CommonUtils.printArr(getMultiCp2(new int[]2,3,1,4));
c语言版本
正在学习中
c++语言版本
正在学习中
思考感悟
第一次想到的是除法,但是其实最后发现不用除法的方式似乎比除法更好写一点,只是边界值的处理需要多加留意一下,比如如果arr[0]时,此时应该如何填写l[i]?我认为l[i]可以写成1即可,这样在后续处理时不需要特殊的逻辑判断。
写在最后
方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!
从数组中包含的行索引中选择矩阵的列[重复]
【中文标题】从数组中包含的行索引中选择矩阵的列[重复]【英文标题】:Select columns of a matrix out of rows indexes contained in an array [duplicate] 【发布时间】:2020-06-23 22:22:09 【问题描述】:假设我有一个给定维度的矩阵,以及一个包含一系列值的数组。数组中包含的值是我要从矩阵中提取值的行的索引。所以,一个例子可能是:
A = np.array([[3, 6, 7, 5, -3, 0], [5, -2, 2, 51, -13, 8], [13, -17, 18, 22, -12, 90], [33, -12, 12, 32, -42, 90]])
B = np.array([0, 2, 3])
预期的结果:
array([[ 3, 7, 5],
[ 5, 2, 51],
[13, 18, 22],
[33, 12, 32]])
【问题讨论】:
我投票决定关闭它,因为这是 NumPy 基本功能的问题。这些信息在 numpy 文档中很容易获得,并且至少在一个重复的问题中,因此我看不出它对任何未来的读者有用。 这能回答你的问题吗? How to access the ith column of a NumPy multidimensional array? 【参考方案1】:这在numpy
中非常简单——只需执行:
A[:, B]
一些有用的参考:https://docs.scipy.org/doc/numpy/user/basics.indexing.html
【讨论】:
以上是关于算法数组与矩阵模块不包含本位置的累乘数组值(含不用除法的方法)的主要内容,如果未能解决你的问题,请参考以下文章