两数相加平均数
必须是被排序好的应用在找寻有哪些配对符合所要的数值接下来让我们实作吧!!!
迴圈版BigO(n^2)
let array1 = [-11,0,1,2,3,4,5,6,7,8]let iunputavg = 2function Average(array, avg){ let result = [] for(let i = 0; i < array.length -1; i++){ for(let j = 1; j < array.length -1; j++){ //index0已经当root了 所以j从index1开始即可 if((array[i] + array[j]) /2 === avg){ //相加/2 === avg result.push([array[i],array[j]]) } } }return result}console.log(Average(array1, iunputavg))//[ [ 0, 4 ], [ 1, 3 ], [ 2, 2 ], [ 3, 1 ], [ 4, 0 ] ]
Pointer BigO(n)
let array1 = [-11,0,1,2,3,4,5,6,7,8]let iunputavg = 2function AveragePointer(array, avg){ let left = 0 let right = array.length -1 let result = [] while(array[right] > array[left]){ //当index[i] > index[i-1] = true才执行 if(((array[right] + array[left]) /2) > avg){ right -- //若大于目标值 代表右边範围过大 right -1 }else if(((array[right] + array[left]) /2) < avg){ left ++ //若小于目标值 代表左边範围过大 left +1 } else{ //若都符合push result result.push([array[right],array[left]]) right-- //由于已经成功所以要缩小範围 left++ //由于已经成功所以要缩小範围 } }return result}console.log(AveragePointer(array1, iunputavg)) //[ [ 4, 0 ], [ 3, 1 ] ]