在一个数组中找出两个数,相加等于某个数,这里是两个方法(一个简单方法,一个稍微好些的方法)
var printA = function(str, A){ for(var i = 0; i< A.length;i++){ alert(str + " : " + A[i]); } } var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0]; var left = []; var right = []; for (var i = 0; i < arr.length; i++){ if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); }; function tSum(num, max, target){ if(arguments.length < 3){ alert("Not enough parameter ~"); return; } var AA = []; for(var i = 0; i<num; i++){ AA.push( Math.ceil(Math.random() * max) ) } /* var i, j; for(var i=0; i<num; i++){ for(var j=i; j<num; j++){ if(AAA[i] + AAA[j] === target){ alert("index " + i + " : " + AAA[i] + "index " + j + " : " + AAA[j]) return; }else{ continue; } } } */
// printA("qs before:", AA);
AAA = quickSort(AA); // printA("qs after:",AAA);
var Len = AAA.length, i = 0, j = Len - 1;
// for(var n = 0; n < Len; n++){
for(var n = 0; n < Len - 1; n++){ if(AAA[i] + AAA[j] > target){ j--; }else if(AAA[i] + AAA[j] < target){ i++; }else{ return(" index " + i + " : " + AAA[i] + " index " + j + " : " + AAA[j]); return; } } return("there are No index for target ~") };
注:上面quicksort的实现,是在网上找来的“阮一峰”的blog的片段。
tSum(3000,10000,82) " index 0 : 3 index 20 : 79" tSum(3000,10000,82) " index 4 : 14 index 18 : 68" tSum(3000,10000,82) "there are No index for target ~" tSum(3000,10000,18732) " index 2609 : 8747 index 2997 : 9985" tSum(3000,10000,1732) " index 3 : 12 index 489 : 1720" tSum(3000,10000,3732) " index 0 : 8 index 1086 : 3724" tSum(3000,10000,18732) " index 2640 : 8743 index 2996 : 9989" tSum(3000,10000,32) " index 0 : 2 index 4 : 30" tSum(3000,10000,32) " index 2 : 6 index 10 : 26" tSum(3000,10000,32) " index 3 : 11 index 7 : 21" tSum(3000,10000,32) " index 1 : 7 index 9 : 25" tSum(3000,10000,32) " index 1 : 7 index 10 : 25" tSum(3000,10000,32) " index 2 : 13 index 6 : 19" tSum(3000,10000,32) "there are No index for target ~"