Javascript 查找恰好存在于一个数组中的最小值
如何编写一个函数来查找不是1且正好存在于一个数组中的最小值 例如:Javascript 查找恰好存在于一个数组中的最小值,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,如何编写一个函数来查找不是1且正好存在于一个数组中的最小值 例如: const x = [1, 8, 7, 3, 4, 1, 8]; const y = [6, 4, 1, 8, 5, 1, 7]; 应返回3,因为它是仅在一个数组(x)中的最低数字。如果没有唯一值,则它应返回一个大于1且小于第二个最小值的数字。比如说 const x = [5, 5, 5, 7 ,7 ,7]; const y = [3, 4, 5, 1, 3, 7]; 上面应该返回2,因为3多次出现,并且最低的唯一值是1,所
const x = [1, 8, 7, 3, 4, 1, 8];
const y = [6, 4, 1, 8, 5, 1, 7];
应返回3,因为它是仅在一个数组(x)中的最低数字。如果没有唯一值,则它应返回一个大于1且小于第二个最小值的数字。比如说
const x = [5, 5, 5, 7 ,7 ,7];
const y = [3, 4, 5, 1, 3, 7];
上面应该返回2,因为3多次出现,并且最低的唯一值是1,所以应该返回的数字是2
我试过以下方法
function lowUniwueValue(x, y) {
const uniqueVal = parseInt(x.filter((obj) => y.indexOf(obj) == -1).toString());
return uniqueVal;
}
上面的函数返回唯一的值,但我不能保证它是最低的
我还尝试创建了一个新的集合,该集合只有唯一的值,但问题是我们看不到低数值是否有重复项。使用数组索引:
常数x=[1,8,7,3,4,1,8]
常数y=[6,4,1,8,5,1,7]
步骤1:迭代数组x,通过将索引数组的索引标记为1,将该元素标记为已访问
第2步:迭代数组y,通过将索引数组的索引标记为1(初始值为0)和2(初始值为1),将该元素标记为已访问
步骤3:索引数组变为arr=[0,2,0,1,2,1,1,2]
答案将是最小的值,即标记为1且不等于1的索引,即3。您可以找到每个数字的频率,也可以找到大于1的最小数字(从两个数组中)。如果它的频率正好是一,那么它就是答案;否则,答案是两个
const getMin=(arr,arr2)=>{
设freq={},
最小值=无穷大;
[…arr,…arr2].forEach(x=>{
频率[x]=(频率[x]| 0)+1;
如果(x>1&&x log(getMin([5,5,5,7,7,7],[3,4,5,1,3,7])代码>再见,绝对无法与其他答案的优雅相比,但我尝试了
函数findMin(x,y){
设array=[Math.min(…x.filter(el=>el!==1)),Math.min(…y.filter(el=>el!==1));
if(数组[0]!==数组[1]){
让occx=x.reduce((a,v)=>(v==array[0]?a+1:a),0);
设occy=y.reduce((a,v)=>(v==array[1]?a+1:a),0);
if(occx==1&&occy==1)返回Math.min(…数组);
否则{
设min=Math.min(…数组)-1;
如果(min!==1)返回min;
否则{
//如果最小值-1==1,则删除找到的最小元素并继续查找
设indexa=x.indexOf(数组[0]);
设indexb=y.indexOf(数组[1]);
x、 拼接(indexa,1);
y、 拼接(indexb,1);
findMin(x,y);
}
}
}
否则{
//如果找到的最小值相等,请删除它们并继续查找
设indexa=x.indexOf(数组[0]);
设indexb=y.indexOf(数组[1]);
x、 拼接(indexa,1);
y、 拼接(indexb,1);
findMin(x,y);
}
}
log(findMin([1,8,7,3,4,1,8],[6,4,1,8,5,1,7]))
console.log(findMin([5,5,5,7,7,7],[3,4,5,1,3,7]))
到目前为止您尝试了什么?python代码适合您吗?@YashShah它是标记为JavaScript的。@Julia请查看更新内容answer@hev1是的,我知道,但这种方法对作者来说可能已经足够了。