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;
        }
    }
  • 相关阅读:
    struts2之拦截器
    JavaWeb开发之HttpServletResponse
    JavaWeb开发之Servlet
    HTTP协议详解
    字符串
    数组
    第一个只出现一次的字符
    DDoS的类型及原理
    引用变量&和指针*的区别
    赋值运算符的重载
  • 原文地址:https://www.cnblogs.com/yupinghua/p/6297470.html
Copyright © 2011-2022 走看看