Javascript 查找恰好存在于一个数组中的最小值

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,所

如何编写一个函数来查找不是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&&xlog(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是的,我知道,但这种方法对作者来说可能已经足够了。