zoukankan      html  css  js  c++  java
  • 判断数组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;
        }
    }
  • 相关阅读:
    隐藏NGINX服务器名称 和版本号
    salt-grains
    格式化输出文本的方法
    递归例子
    yield 生成器例子
    Python基础之函数
    Python基础之面向对象
    Python基础之模块2
    Python基础之字符编码
    Python基础之文件操作
  • 原文地址:https://www.cnblogs.com/yupinghua/p/6297470.html
Copyright © 2011-2022 走看看