在一个数组中找出两个数,相加等于某个数,这里是两个方法(一个简单方法,一个稍微好些的方法)

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 ~"

 

posted @ 2015-04-23 13:53  FranklinYang  阅读(697)  评论(0)    收藏  举报