目录
整数对最小和
考察排序,数组拍平
题目描述
给定两个整数数组array1、array2,数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素,
现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值
注意
两对元素如果对应于array1、array2中的两个下标均相同,则视为同一对元素。
输入描述
输入两行数组array1、array2,每行首个数字为数组大小size(0 < size <= 100);
0 < array1[i] <= 1000
0 < array2[i] <= 1000
接下来一行为正整数k
0 < k <= array1.size() * array2.size()
输出描述
满足要求的最小和
示例1
输入
1 1 2 3
1 2 3 3
2
输出
4
说明
用例中,需要取2对元素
取第一个数组第0个元素与第二个数组第0个元素组成1对元素[1,1];
取第一个数组第1个元素与第二个数组第0个元素组成1对元素[1,1];
求和为1+1+1+1=4,为满足要求的最小和
解析
新建一个二维数组,数组的行列长度和array1、array2的长度对应,通过循环给数组的每一位赋值,
arr[i][j]表示的为一对元素的和,将二维数组拍平,然后按升序排列,取前k位的和即为满足要求的最小和。
答案
function calcPairSum(str){
let arr = str.split('\n')
let n = Number(arr.pop())
let [array1,array2]=arr.map(v=>v.split(' ').map(Number))
let len1 = array1.length;
let len2 = array2.length
arr = new Array(len1).fill(0).map(v=>new Array(len2).fill(0))
for(let i = 0;i<len1;i++){
for(let j = 0;j<len2;j++){
arr[i][j]=array1[i]+array2[j]
}
}
arr=arr.flat().sort((a,b)=>a-b)
return arr.slice(0,n).reduce((t,v,i)=>t+v)
}
console.log(calcPairSum(`1 1 2 3
1 2 3 3
2`))
素数之积
考察数学素数定义
题目描述
RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个32位正整
数,请对其进行因数分解,找出是哪两个素数的乘积。