判斷數組B是否為數組A的子集


網上看到的,題目應該叫判斷一個數組是否是另一個數組的子集,或者說判斷一個字符串是否是另一個字符串的子集。字符串有點困難,我這里僅僅只是找了數字的數組。

用javascript改寫了一下,but,遇到一個問題是在快速排序法那里,原來取出arr[0]作為基准值之后,在循環比較的時候要從1開始。否則報錯遞歸溢出!我找了半天原因,痛苦!

轉載和抓取請留鏈接http://www.cnblogs.com/yupinghua/p/6297470.html

 

var arrA=[33,11,88,22,33,56,16,44,99,18,66];
var arrB=[11,22,33,56,16,18,66];
console.log('排序前arrA:'+arrA);
console.log('排序前arrB:'+arrB);

console.log('排序后arrA:'+quickSort(arrA));
console.log('排序后arrB:'+quickSort(arrB));
var arr1 = quickSort(arrA);
var arr2 = quickSort(arrB);
console.log('數組B是否為數組A的子集:'+isSubset(arr1,arr2));

//快速排序
function quickSort(arr) {
  if (arr.length ==0){
        return []; 
    }
      
  var pivot = arr[0];
  var left = [];
  var right = [];
  for (var i = 1; 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 isSubset(arr1,arr2){
    var i=0,j=0;
    if(arr1.length<arr2.length) return false;
    
    while(i<arr2.length && j<arr1.length){
        if(arr1[j] < arr2[i]){
            j++;
        }else if( arr1[j] == arr2[i] ){
            j++;
            i++;
        }else if( arr1[j]>arr2[i]){
            return false;
        }
    }

    if(i<arr2.length){
        return false;
    }else{
        return true;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM